2011-05-05 43 views
0

我有四個列名,Level1, Level2, Level3和默認爲空值,我想檢索所有沒有Level1, Level 2, Level 3的行完成。問題用<>同時比較SQL Server 2005中的空值

這是我的我的查詢,但它沒有獲取任何值。請幫我

select name from table 
where Level1 <>'Completed' and Level2 <> 'Completed and Level3 <> 'Completed' 

或者

select name from table 
where Level1 <>'Completed' or Level2 <> 'Completed or Level3 <> 'Completed' . 

但它不取任何行。 <>運算符或NULL值有問題嗎?

+0

'NULL'不是一個值 - 它是值**的**缺失**。因此,您**不能**使用常規比較運算符 - 包含NULL的列的'=,<>,> =,<='也總是爲NULL(既不是'true'也不''' ) – 2011-05-05 10:55:26

回答

3

NULL值,你應該使用value is not nullvalue is null

+0

從表中選擇名稱,其中Level1 <>'Completed'且爲null或Level2 <>'已完成且爲null或Level3 <>'已完成'且爲空。你是否認爲我的查詢是這樣的 – chaitanya 2011-05-05 10:34:36

+0

我的問題是,如果所有三個列是level1,level2,level3的值爲'Completed',我不想獲取該記錄。我只是想過濾該記錄。如果任何一個級別爲「已完成」,則其他兩個級別都爲空,或者兩個級別中的任何一個完成,其他1爲空。我也想取得他們的記錄。 – chaitanya 2011-05-05 10:42:14

+0

請幫我解決這個問題 – chaitanya 2011-05-05 10:47:05

0

用NULL列表示該列值未知或不可用。 NULL不等於0或零長度的字符串。

爲了過濾行基礎上,你必須使用IS NULLIS NOT NULL

要查找行,其中的列中的任何一個都爲空,你可以使用下面的查詢NULL值:

Select * 
From YourTable 
Where Level1 Is Null Or Level2 Is Null Or Level3 Is Null 

在MS SQL Server中查看MSDN Article for a full explanation of NULL Comparisions

1

由於您需要分別對待NULL「非值」,請嘗試如下所示:

SELECT name 
FROM dbo.table 
WHERE ISNULL(Level1, 'null') <> 'Completed' 
    AND ISNULL(Level2, 'null') <> 'Completed' 
    AND ISNULL(Level3, 'null') <> 'Completed' 

如果一列是NULL,那麼NULL將與您在作爲第二arugment傳遞給ISNULL()任何值來代替 - 而且因爲我更換與「空」字符串NULL - 這不是等於'Completed'並且將被選中。

+0

例如:名稱level1 level2 level3 – chaitanya 2011-05-05 11:20:09

+0

感謝馬克...當我編輯我的查詢這樣的工作........ SELECT name FROM dbo.table WHERE ISNULL(Level1,'null')<>'Completed' OR ISNULL(Level2,'null')<>'Completed'或ISNULL(Level3,'null')<>'Completed' – chaitanya 2011-05-05 12:27:58