我在REAL列中有一些记录为NaN的记录。我知道在SQLite中没有特定的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?
答案 0 :(得分:1)
SQLite将NaN值视为NULL
。 (此转换在内部函数sqlite3VdbeMemSetDouble
中完成。)
似乎正在发生的事情是您的专栏正在存储字符串 'NaN'
而不是NULL
。比较的结果由an arbitrary rule确定,数字小于字符串。
如果您更喜欢3VL行为,val<0.06
和val>0.06
都返回NULL
,因此您的查询不会选择这些行,请执行以下命令:
UPDATE trainer_npos5_3_scored SET val = NULL WHERE val LIKE 'NaN'