select A from table1 where A <> '-'
此查詢排除-
以及空值。爲什麼是空值?如果不通過IS NULL
explcitely包括他們總是已排除SQL where子句不區分' - '和NULL
select A from table1 where A <> '-'
此查詢排除-
以及空值。爲什麼是空值?如果不通過IS NULL
explcitely包括他們總是已排除SQL where子句不區分' - '和NULL
<>是標準的SQL-92; !=是它的等價物。兩者都評估值, 其中NULL不是 - NULL是一個佔位符,說有一個值不存在 。
這就是爲什麼你只能使用IS NULL/IS NOT NULL作爲 這種情況的謂詞。
此行爲不是特定於SQL Server。所有符合標準的SQL方言都以相同的方式工作。
請參見參考這裏:
Not equal <> != operator on NULL
只要尋找適當的關鍵字爲您瀏覽的結果,您的問題有效
NULL
值。 NULL表示不是未知。您不能用= NULL
選擇它們,或者用<> NULL
省略它們。與NULL
結果不true
或false
但未知任何比較。
你必須使用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
謝謝蒂姆,但我的問題是不同的。我使用的情況下,A <>' - '(破折號),但這種情況也排除了我的空值從表 – Jack
@DatabasePirate:是的,這就是我想說我的答案。除非你不用'IS NULL'或'IS NOT NULL'來請求它們,'NULL'值永遠不會包含在結果集中。與NULL的比較(就像你用'NULL'來做'''')總是會導致'NULL'而不是'true'/'false'。 NULL值既不相等也不等於任何值,甚至不同於另一個NULL值。在某些rdbms中,您可以禁用此行爲f.e.在具有'SET ANSI_NULLS OFF'的SQL Server中。 –
標籤DBMS,顯示輸入,顯示所需的輸出。 – DarkKnight
空的不排除,他們不包括在內...... – jarlh