我执行上浮点数以下SQLite的查询:SQLite的浮点条件
SELECT * FROM Point where x1 < 12 AND x2 > 12
的查询工作的less than
条件,但不能正确评估greater than
条件。它似乎认为6.12
的值大于12.
在SQLite中评估浮点数有什么已知问题吗?
我执行上浮点数以下SQLite的查询:SQLite的浮点条件
SELECT * FROM Point where x1 < 12 AND x2 > 12
的查询工作的less than
条件,但不能正确评估greater than
条件。它似乎认为6.12
的值大于12.
在SQLite中评估浮点数有什么已知问题吗?
可能您的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
。
或x2 + 0也似乎将列转换为数字 –
可能在更多的算术费用上。做'x2 + 0'本质上将评估为'CAST(x2 AS NUMERIC)+ 0'。 –
也许你混合的条件下,你是一个使用,如小数点分隔的机器上,或者你比较字符串(如d士丹利的意见建议)
My demo in SQLFiddle按预期工作。
你能展示一些你的数据的例子,特别是包含6.12的行吗? – mucio
我猜它正在做一个字符串比较 - 是'x1'和'x2'字符串列或数字列吗? –
他们是字符串列 –