我正在使用MSSQL 2008。 我试图做这样的事情:
select Name, AcctBal
from Table1
where AcctBal <> '0.00'
为什么此查询不会返回AcctBal
NULL
个值?
答案 0 :(得分:5)
要将列值与NULL
进行比较,您必须使用IS NULL
或IS NOT NULL
select Name, AcctBal from Table1 where AcctBal <> '0.00' OR AcctBal IS NULL
答案 1 :(得分:4)
这是因为NULL不是特定的nummeric值或任何其他值。如果您还想查看具有NULL的te记录,则应将where语句更改为:其中AcctBal&lt;&gt; '0.00'或AcctBall为空
答案 2 :(得分:2)
与null的比较是假的 需要添加
or AcctBal is null
答案 3 :(得分: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