SQL SERVER 和不等于 (<>) 运算符上的 NULL 值

问题描述 投票:0回答:1

我在 where 子句中有以下语句

COLUMN_1 <> 'O'
但是
NULL
上包含
COLUMN_1
的行不会被考虑在内,就好像它们包含值
'O'

这是为什么?

sql-server null equality
1个回答
5
投票

因为

NULL
不等于,not也不等于任何东西,包括
NULL
NULL <> 'O'
评估为未知;这显然是不正确的。

如果您想使用

NULL
值进行评估,您需要使用
IS NULL
:

WHERE (COLUMN_1 <> 'O' OR COLUMN_1 IS NULL)

这也记录在两篇不等于运算符文章中:

不等于 (Transact SQL) - 传统

比较两个表达式(比较运算符)。比较非空表达式时,如果左操作数不等于右操作数,则结果为 TRUE;否则,结果为 TRUE。否则,结果为 FALSE。如果其中一个或两个操作数均为 NULL,请参阅主题 SET ANSI_NULLS (Transact-SQL)

不等于 (Transact SQL) - 感叹号

测试一个表达式是否不等于另一个表达式(比较运算符)。如果其中一个或两个操作数均为 NULL,则返回 NULL。功能与 <>(不等于) 比较运算符相同。

© www.soinside.com 2019 - 2024. All rights reserved.