SQL Server中如何查询installment列的0与NULL值?
问题原因&解决方案
为什么WHERE installment IN (0, NULL)不生效?
SQL里的NULL遵循三值逻辑,任何和NULL的比较(包括= NULL或者IN列表里包含NULL)都会返回UNKNOWN,而WHERE条件只会筛选出结果为TRUE的行。所以IN (0, NULL)本质等价于installment = 0 OR installment = NULL,其中installment = NULL永远不会成立,最终只会返回值为0的行。
正确写法
最直接的方式是分开判断0和NULL:
WHERE installment = 0 OR installment IS NULL
如果想简化写法,也可以用COALESCE把NULL转换成0再匹配(注意:如果列中存在其他会被COALESCE转为0的特殊值,这个方法需要谨慎使用):
WHERE COALESCE(installment, 0) = 0
内容的提问来源于stack exchange,提问作者Mostafa Hossny
相关产品推荐
相关产品推荐

