2016-11-22 140 views
1

当查询布尔字段为空,为什么查询空布尔字段

Select * From MyTableName where [boolfieldX] <> 1 

未与[boolfieldX]空返回任何行? 1 <> null我会有预期的行返回null。

回答

2

无法使用比较运算符(例如=,<<>)测试NULL值。

您必须使用IS NULLIS NOT NULL运营商来替代,或者你要使用的功能,如ISNULL()COALESCE()

Select * From MyTableName where [boolfieldX] <> 1 OR [boolfieldX] IS NULL 

OR

Select * From MyTableName where ISNULL([boolfieldX],0) <> 1 

了解更多关于空比较Stackoverflow Documentation

Read mo再在Stackoverflow Documentation

+1

[@Graham](https://stackoverflow.com/users/641914/graham)请尝试鼓励修复链接到文档,而不是直接删除链接和周围段落,留下评论。 –

-2

ISNULL()COALESCE()功能嗨尝试使用此查询:

select * from mytablename where [boolFieldX] is null And [boolFieldX] <> 1 
1

我认为,这是因为空是一个未知的值。您无法查询未知的“值”。在我看来,将null看作一个“价值”是一个矛盾,因为它代表一个未知数。使用运算符“空”和“不空”连同任何选择条件将返回所需的结果,或通过将空值转换为替代值来进行转换将如下工作:IsNull([boolfield],'一些兼容值')