sql - IS NULL 与 <> 1 SQL 位

标签 sql sql-server null sql-server-2012

我在 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/

相关文章:

sql-server - SQL Server 创建用户后无法登录

mysql - 如何: MYSQL average from multiple columns excluding Null Values and Changing Number Divided By

c - 在结构中将指针数组初始化为 NULL

php - 从多个表中计算不同的用户 ID

sql-server - SQL 整理语句 where 子句

sql-server - MSMQ 作为 SQL Server 插入的缓冲区

MySQL 格式化字符串或在 NULL 上返回空字符串

sql - 将前一行值减去当前行

mysql - 查询以对具有条件的列的某些值求和

sql - 查找某年获奖次数最多的电影——代码重复