的問題我有一個表,其中包含一個名爲status的type smallint的列,並接受null。 SQL Server 2000.比較smallint where where子句
我的數據在該字段中包含大部分2,但也包含0和null。
當我做
select *
from table
where status <> 2
我沒有得到所有適當的記錄(其中狀態爲空或0)。任何想法爲什麼發生這種情況以及如何糾正? <>除了2以外還能給我什麼?
的問題我有一個表,其中包含一個名爲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