我執行上浮點數以下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'字符串列或數字列嗎? –
他們是字符串列 –