SQLite3中的NaN具有无效的数值比较

时间:2013-12-16 20:09:31

标签: sqlite

我在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?

1 个答案:

答案 0 :(得分: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'