2013-12-16 29 views
0

我在註冊爲NaN的REAL列中有一些記錄。據我所知,是SQLite中的NaN沒有具體的存儲值,這些只是存儲爲文本,但在任何情況下,應該有這樣的價值觀在合理的數值比較SQLite3中的NaN有無效的數字比較

sqlite> select post,val from trainer_npos5_3_scored where key='FER201008214' and val<0.06; 
sqlite> select post,val from trainer_npos5_3_scored where key='FER201008214' and val>0.06; 
1|0.07023458 
3|0.1461988 
4|0.08926977 
6|NaN 
2|0.1489425 
5|0.0628851721249876 
sqlite> 

所以,當我問值> 0.06我得到了NaN,當我要求價值較少時,我不明白。這裏最低爲0.0628。

我該如何處理SQLite3中的某些一致性的NaN?

回答

1

SQLite將NaN值視爲NULL。 (這種轉換是在內部功能sqlite3VdbeMemSetDouble完成。)

什麼似乎正在發生的事情是,你的列存儲'NaN',而不是NULL。比較結果由an arbitrary rule決定,數字小於字符串。

如果你喜歡3VL行爲,其中val<0.06val>0.06都返回NULL等你的查詢不選擇這些行,執行命令:

UPDATE trainer_npos5_3_scored SET val = NULL WHERE val LIKE 'NaN' 
+0

是的!謝謝。發佈後,我意識到所有NaN都比任何數字都大。 NaN通過DBD :: SQLite模塊從Perl中獲得。我必須更詳細地看一下 – epistosaurus