SQL <> false 不返回带有空值的字段



我正在设置一个基于表中另一个字段的字段:

count(case
when recipient_status = 'Premium' and
delivered_in_estimated_time_window <> false
then 1 end)                                                                     

如果我得到一个值delivered_in_estimated_time_window作为null,我想计数它,只有当值为false时,我才不想计数它。例如,如果一行看起来像这样:

recipient_status | delivered_in_estimated_time_window
'Premium'        | null

那么我想加到count 1。只有当一行看起来像下面这样时,我才不想计数:

recipient_status | delivered_in_estimated_time_window
'Premium'        | false

但是,这似乎不包括null字段。为什么<> false不为null值工作?

NULL不是真或假,它什么都不是,因此你不能检查它是真还是假。如果您希望NULL的值像true一样,您可以使用COALESCENULL的值替换为true:

...COALESCE(delivered_in_estimated_time_window,true) <> false...

那么,你的示例将是:

COUNT(CASE
WHEN recipient_status = 'Premium' AND
COALESCE(delivered_in_estimated_time_window,true) <> false
THEN 1 END)  
COUNT(
CASE WHEN recipient_status='Premium' AND
IFNULL(delivered_in_estimated_time_window, true) <> false 
THEN 1 
END
)

如上所述,NULL是"特殊的":它不等于或不等于其他任何东西,它只是NULL。将内容包装在IFNULLCOALESCE中,或者像上面建议的那样添加包括IS (NOT) NULL在内的更多条件。

最新更新