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