ché*_*ché 19 sql sql-server null sql-server-2012
我在SQL Server 2012数据库的表上有一个列.
我试图检索此位列为NULL或不正确的所有行.
此查询不会带回它应该的内容:(返回0行)
Select *
from table
where bit_column_value <> 1
Run Code Online (Sandbox Code Playgroud)
此查询返回正确的行:
Select *
from table
where bit_column_value IS NULL
Run Code Online (Sandbox Code Playgroud)
现在,我很乐意使用第二个查询,但我的问题是,在另一个表的类似查询中,上面的反向是正确的,第一种方式有效,但第二种方式不行!
有人可以协助解释上面的差异吗?我已经专门更新了相关的位列为NULL,这不会改变结果.(想想也许"空"和Null价值之间存在差异.
提前感谢您的任何解释.
Ben*_*thy 27
之所以<>不起作用是SQL对待NULL未知-它不知道什么NULL是应该的意思,所以它会评估=,并<>在NULL值UNKNOWN(在where子句或连接条件视为假).有关详细信息,请阅读:为什么NULL = NULL在SQL Server中评估为false.
如果有一个索引,使用ISNULL函数将意味着索引不能使用,所以要确保查询可以使用索引只需使用OR:
SELECT *
FROM TableName
WHERE
bit_column_value IS NULL OR bit_column_value = 0
Run Code Online (Sandbox Code Playgroud)
小智 7
你最好的选择是写下这样的查询:
SELECT
*
FROM
table
WHERE
ISNULL(bit_column_value, 0) = 0
Run Code Online (Sandbox Code Playgroud)
这应该返回所有NULL和FALSE记录.
在没有看到您的表格结构和数据的情况下,我无法评论为什么您从2个查询中获得不同的结果.