我正在使用 MSSQL 2008。我试图做这样的事情:
select Name, AcctBal
from Table1
where AcctBal <> '0.00'
为什么此查询不返回AcctBal
withNULL
值?
我正在使用 MSSQL 2008。我试图做这样的事情:
select Name, AcctBal
from Table1
where AcctBal <> '0.00'
为什么此查询不返回AcctBal
withNULL
值?
要将列值与您进行比较,NULL
您必须使用IS NULL
或IS NOT NULL
select Name, AcctBal from Table1 where AcctBal <> '0.00' OR AcctBal IS NULL
这是因为 NULL 不是特定的数值或任何其他值。如果您还想查看具有 NULL 的记录,您应该将 where 语句更改为: where AcctBal <> '0.00' or AcctBall is null
与 null 的比较为 false
需要添加
or AcctBal is null
前面所有的答案都是正确的,基于 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