1

我正在使用 MSSQL 2008。我试图做这样的事情:

select  Name, AcctBal 
from Table1 
where AcctBal <> '0.00'

为什么此查询不返回AcctBalwithNULL值?

4

4 回答 4

5

要将列值与您进行比较,NULL您必须使用IS NULLIS NOT NULL

select  Name, AcctBal from Table1 where AcctBal <> '0.00' OR AcctBal IS NULL
于 2013-07-24T18:42:28.637 回答
4

这是因为 NULL 不是特定的数值或任何其他值。如果您还想查看具有 NULL 的记录,您应该将 where 语句更改为: where AcctBal <> '0.00' or AcctBall is null

于 2013-07-24T18:42:31.387 回答
2

与 null 的比较为 false
需要添加

or AcctBal is null
于 2013-07-24T18:41:42.413 回答
0

前面所有的答案都是正确的,基于 ANSI 标准,但是 SQL Server 确实提供了一个开关来覆盖它(我不建议使用它,但有助于理解整个画面)。

SET ANSI_NULLS ON -- this is ON by default
SELECT CASE WHEN 1 <> NULL THEN 'true' ELSE 'false' END AS Answer

SET ANSI_NULLS OFF
SELECT CASE WHEN 1 <> NULL THEN 'true' ELSE 'false' END AS Answer

此外,重要的是要意识到同样的行为适用于 NOT IN(一个讨厌的陷阱):

SET ANSI_NULLS ON -- this is ON by default
SELECT CASE WHEN NULL NOT IN (1,2,3) THEN 'not there' ELSE 'there' END
于 2013-07-24T18:57:51.350 回答