2013-10-21 17 views
0

我执行上浮点数以下SQLite的查询:SQLite的浮点条件

SELECT * FROM Point where x1 < 12 AND x2 > 12 

的查询工作的less than条件,但不能正确评估greater than条件。它似乎认为6.12的值大于12.

在SQLite中评估浮点数有什么已知问题吗?

+0

你能展示一些你的数据的例子,特别是包含6.12的行吗? – mucio

+2

我猜它正在做一个字符串比较 - 是'x1'和'x2'字符串列或数字列吗? –

+0

他们是字符串列 –

回答

1

可能您的x2列是TEXT数据。你必须CAST它漂浮在为了使代数比较:

SELECT * FROM Point where x1 < 12 AND CAST(x2 AS FLOAT) > 12; 

更好,将您所有的字符串数据转换为浮点:

UPDATE Point SET x2=CAST(x2 AS FLOAT) WHERE CAST(x2 AS FLOAT)=x2; 

这都将TEXT浮点数转换为FLOAT

+0

或x2 + 0也似乎将列转换为数字 –

+0

可能在更多的算术费用上。做'x2 + 0'本质上将评估为'CAST(x2 AS NUMERIC)+ 0'。 –

0

也许你混合的条件下,你是一个使用,如小数点分隔的机器上,或者你比较字符串(如d士丹利的意见建议)

My demo in SQLFiddle按预期工作。