首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >IS NULL与<> 1 SQL位

IS NULL与<> 1 SQL位
EN

Stack Overflow用户
提问于 2013-02-05 14:16:42
回答 2查看 34.5K关注 0票数 21

我在SQL Server 2012数据库中的一个表上有一个位列。

我正在尝试检索此位列为NULL或非TRUE的所有行。

此查询没有返回它应该返回的内容:(返回0行)

代码语言:javascript
复制
Select * 
from table 
where bit_column_value <> 1

此查询返回正确的行:

代码语言:javascript
复制
Select * 
from table 
where bit_column_value IS NULL

现在,我很乐意使用第二个查询,但我的问题是,在另一个表的类似查询中,上面的相反情况是正确的,其中第一种方法有效,但第二种方法无效!

有没有人能帮我解释一下上面的区别?我特别将相关的位列更新为NULL,这不会改变结果。(我认为"Empty“和Null值之间可能存在差异。

提前感谢您的解释。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-05 14:37:54

<>不工作的原因是SQL将NULL视为未知-它不知道NULL应该是什么意思,因此它将NULL值上的=<>都计算为UNKNOWN (在where子句或连接条件中被视为false )。更多信息,请阅读:Why does NULL = NULL evaluate to false in SQL server

如果存在索引,则使用ISNULL函数将意味着不能使用该索引,因此为了确保查询可以使用该索引,只需使用OR

代码语言:javascript
复制
SELECT * 
FROM TableName
WHERE
   bit_column_value IS NULL OR bit_column_value = 0
票数 30
EN

Stack Overflow用户

发布于 2013-02-05 14:21:56

最好的方法是这样编写查询:

代码语言:javascript
复制
SELECT
     * 
FROM 
     table 
WHERE 
     ISNULL(bit_column_value, 0) = 0

这应该会返回所有的NULL和FALSE记录。

如果没有看到您的表结构和数据,我无法真正评论为什么您的两个查询会得到不同的结果。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14701314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档