当我运行以下查询时:
select top 5 * from BI_Completes (nolock)where IPAddress <> NULL
我得到0结果。
但如果我将其作为
运行select top 5 * from BI_Completes (nolock)where IPAddress <> 'NULL'
然后按预期工作..
这些之间有什么区别?
答案 0 :(得分:8)
您不能将比较运算符与NULL一起使用,因为无法比较NULL,也不能与自身进行比较 您必须使用IS运算符:
select top 5 *
from BI_Completes (nolock)
where IPAddress IS NOT NULL
第二个语句,检查IPAddress不等于字符序列'NULL'。
答案 1 :(得分:2)
第一个片段不正确。 NULL&lt;&gt; NULL始终为false,因为NULL根据定义永远不等于它自己:您无法知道它是否等于自身,因此比较有效 false。第二个片段使用的字符串文字恰好与您的任何数据都不匹配。
您应该使用的正确代码如下所示:
select top 5 * from BI_Completes (nolock)where IPAddress IS NOT NULL
答案 2 :(得分:2)
查看this MSDN文章,讨论与NULL
的比较。
在你的情况下,看起来你得到了UNKNOWN
的结果,这就是为什么没有返回的原因。您可能将ANSI_NULLS
设置为ON
,这将导致返回UNKNOWN
的值。此外,您在第二个示例中与之比较的'NULL'是字符串比较。
Andrea或Joel关于处理NULL的正确方法的答案是正确的(使用IS NOT NULL
而不是检查相等性。)