比较smallint where where子句
问题描述:
的问题我有一个表,其中包含一个名为status的type smallint的列,并接受null。 SQL Server 2000.比较smallint where where子句
我的数据在该字段中包含大部分2,但也包含0和null。
当我做
select *
from table
where status <> 2
我没有得到所有适当的记录(其中状态为空或0)。任何想法为什么发生这种情况以及如何纠正? <>除了2以外还能给我什么?
答
select *
from table
where ISNULL(status, 1) <> 2
NULL doesn't compare:因此将其删除。
你举的例子是“常识性错误”上Wikipedia太...
答
你期待什么可以ANSI_NULLS设置为关闭来实现。
例如,尝试运行这些查询:
set ansi_nulls off
select case when 1 != null then 'true' else 'false' end
set ansi_nulls on
select case when 1 != null then 'true' else 'false' end
话虽这么说,这是你期待看到非常不标准的SQL行为。因为每个开发人员都会期望这种类型的SQL查询行为,所以无论是否等于比较,NULL比较始终应被视为false。
你的WHERE子句应该再像:
where status <> 2 or status is null
另一种选择是只是为了比较状态= 1,如果这就是你希望要包含在您的查询的唯一状态。
所以我感到很蠢,直到我看到人们抱怨它如何工作的“批评”部分。不过,不知道我是如何错过那个条目的...... – MAW74656 2011-04-29 16:33:47
这个NULL值只是* *。我有更好的事情要抱怨:-) – gbn 2011-04-29 16:35:38