我在 SQL Server 2012 数据库的表上有一个位列。
我正在尝试检索该位列为 NULL
或 NOT TRUE 的所有行。
此查询没有返回应有的结果:(返回 0 行)
Select *
from table
where bit_column_value <> 1
此查询返回正确的行:
Select *
from table
where bit_column_value IS NULL
现在,我很乐意使用第二个查询,但我的问题是,在另一个表的类似查询中,上述情况相反,第一种方法有效,但第二种方法无效!
有人可以帮忙解释一下上面的区别吗?我已专门将相关位列更新为 NULL,这不会改变结果。 (认为“Empty”和 Null
值之间可能存在差异。
预先感谢您的任何解释。
最佳答案
原因<>
不起作用的是 SQL 处理 NULL
未知 - 它不知道什么 NULL
应该意味着,所以它评估 =
和<>
在NULL
上值为 UNKNOWN
(在 where 子句或连接条件中被视为 false)。欲了解更多信息,请阅读:Why does NULL = NULL evaluate to false in SQL server .
如果上面有索引,使用ISNULL函数将意味着索引不能使用,所以
确保查询可以使用索引只需使用 OR
:
SELECT *
FROM TableName
WHERE
bit_column_value IS NULL OR bit_column_value = 0
关于sql - IS NULL 与 <> 1 SQL 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14701314/