2016-11-22 188 views
1

當查詢布爾字段爲空,爲什麼查詢空布爾字段

Select * From MyTableName where [boolfieldX] <> 1 

未與[boolfieldX]空返回任何行? 1 <> null我會有預期的行返回null。

回答

2

無法使用比較運算符(例如=,<<>)測試NULL值。

您必須使用IS NULLIS NOT NULL運營商來替代,或者你要使用的功能,如ISNULL()COALESCE()

Select * From MyTableName where [boolfieldX] <> 1 OR [boolfieldX] IS NULL 

OR

Select * From MyTableName where ISNULL([boolfieldX],0) <> 1 

瞭解更多關於空比較Stackoverflow Documentation

Read mo再在Stackoverflow Documentation

+1

[@Graham](https://stackoverflow.com/users/641914/graham)請嘗試鼓勵修復鏈接到文檔,而不是直接刪除鏈接和周圍段落,留下評論。 –

-2

ISNULL()COALESCE()功能嗨嘗試使用此查詢:

select * from mytablename where [boolFieldX] is null And [boolFieldX] <> 1 
1

我認爲,這是因爲空是一個未知的值。您無法查詢未知的「值」。在我看來,將null看作一個「價值」是一個矛盾,因爲它代表一個未知數。使用運算符「空」和「不空」連同任何選擇條件將返回所需的結果,或通過將空值轉換爲替代值來進行轉換將如下工作:IsNull([boolfield],'一些兼容值')