2015-09-18 38 views
0
select A from table1 where A <> '-' 

此查詢排除-以及空值。爲什麼是空值?如果不通過IS NULL explcitely包括他們總是已排除SQL where子句不區分' - '和NULL

+1

標籤DBMS,顯示輸入,顯示所需的輸出。 – DarkKnight

+1

空的不排除,他們不包括在內...... – jarlh

回答

1

<>是標準的SQL-92; !=是它的等價物。兩者都評估值, 其中NULL不是 - NULL是一個佔位符,說有一個值不存在 。

這就是爲什麼你只能使用IS NULL/IS NOT NULL作爲 這種情況的謂詞。

此行爲不是特定於SQL Server。所有符合標準的SQL方言都以相同的方式工作。

請參見參考這裏:

Not equal <> != operator on NULL

只要尋找適當的關鍵字爲您瀏覽的結果,您的問題有效

0

NULL值。 NULL表示不是未知。您不能用= NULL選擇它們,或者用<> NULL省略它們。與NULL結果不truefalse未知任何比較。

你必須使用COALESCE使用

SELECT A from table1 where A IS NULL OR A <> '-'; 

另一種方式:

SELECT A from table1 where COALESCE(A, '') <> '-'; 

閱讀:https://en.wikipedia.org/wiki/SQL#Null_or_three-valued_logic_.283VL.29

+0

謝謝蒂姆,但我的問題是不同的。我使用的情況下,A <>' - '(破折號),但這種情況也排除了我的空值從表 – Jack

+0

@DatabasePirate:是的,這就是我想說我的答案。除非你不用'IS NULL'或'IS NOT NULL'來請求它們,'NULL'值永遠不會包含在結果集中。與NULL的比較(就像你用'NULL'來做'''')總是會導致'NULL'而不是'true'/'false'。 NULL值既不相等也不等於任何值,甚至不同於另一個NULL值。在某些rdbms中,您可以禁用此行爲f.e.在具有'SET ANSI_NULLS OFF'的SQL Server中。 –