2014-12-07 108 views
0

我有如下表:IFNULL并凝聚似乎不工作

SELECT * FROM calls LIMIT 10; 
time    |number  |duration|calltype 
2011-02-21 19:06:19|11243243569| NULL|missed 
2010-07-12 17:47:14|11234123445| NULL|missed 
2010-07-01 20:55:14|11234123459|  52|placed 
2010-07-24 22:43:53|12342345662|  363|received 
2010-07-22 01:05:25|11234123412| NULL|missed 
2010-09-16 00:09:03|14321234231| NULL|missed 
2010-10-08 16:31:13|14234234253| NULL|missed 
2010-10-05 17:34:28|15534535234| NULL|missed 
2010-10-22 04:27:15|16127085031| NULL|missed 
2010-10-22 23:46:55|12182308974| NULL|missed 

我想是的NULL持续时间的0所取代,但IFNULL似乎并没有工作。

SELECT time,number,IFNULL(duration,0),calltype FROM calls LIMIT 10; 
time    |  number|IFNULL(duration,0)|calltype 
2011-02-21 19:06:19|11243243569|    NULL|missed 
2010-07-12 17:47:14|11234123445|    NULL|missed 
2010-07-01 20:55:14|11234123459|    52|placed 
2010-07-24 22:43:53|12342345662|    363|received 
2010-07-22 01:05:25|11234123412|    NULL|missed 
2010-09-16 00:09:03|14321234231|    NULL|missed 
2010-10-08 16:31:13|14234234253|    NULL|missed 
2010-10-05 17:34:28|15534535234|    NULL|missed 
2010-10-22 04:27:15|16127085031|    NULL|missed 
2010-10-22 23:46:55|12182308974|    NULL|missed 

事实上,这个问题,同时试图使用COALESCE()MAX()总运营商,发现他们也返回空值出现。

这里可能会发生什么?我如何让聚合忽略NULL和IFNULL的工作?

更新

的结果列在此使用typeof命令:

SELECT duration,typeof(duration) as typ FROM calls LIMIT 10; 
duration|typ 
    NULL|text 
    NULL|text 
     52|integer 
    363|integer 
    NULL|text 
    NULL|text 
    NULL|text 
    NULL|text 
    NULL|text 
    NULL|text 
+0

我使用SQLite'3.8.2 2013年12月6日14点53分三十〇秒27392118af4c38c5203a04b8013e1afdb1cebd0d' – Richard 2014-12-07 23:00:29

+0

升级到SQLite的'3.8.7.2情节中字20时57分56秒2ab564bf9655b7c7b97ab85cafc8a48329b27f93'没有任何改变。 – Richard 2014-12-07 23:22:30

+0

'SELECT DISTINCT typeof(duration)FROM calls'的输出是什么? – 2014-12-08 08:26:58

回答

0

ifnull功能仅适用于一个类型为NULL值,而不是文本'NULL'

到字符串'NULL'映射到别的东西,你可以用一个CASE expression

SELECT time, 
     number, 
     CASE duration WHEN 'NULL' THEN 0 ELSE duration END AS duration, 
     calltype 
FROM calls 

这将是一个更好的主意,用真正 NULL值。

+0

现在我正在使用它们!数据库部分是通过别人的Python项目中重复使用的代码创建的,并且打印出“NULL”字符串。在Python中将其切换为'None'会导致'sqlite3'库打印_real_'NULL'值。 – Richard 2014-12-08 16:50:08