2012-03-16 44 views
1

我有一個表,其中包含一個允許空值或空值的varchar列。如何檢查一列是否等於一個變量可爲空

我正在寫一個包含可以被分配到一個空值或者一個普通的字符串(非空)

是這樣的定義的變量的存儲過程:

declare @myvar varchar(50) 

現在的我m試圖編寫一個查詢,該查詢返回列等於此變量的行,或者它爲空或空。到目前爲止,我認爲這是去上班:

select * from mytable where mycolumn [email protected] or mycolumn ='' 

但是,如果列爲空並且變量爲null,將不返回任何值。

我知道我可以使它工作做這樣的事情:

select * from mytable where (mycolumn = @myvar and mycolum is not null) or mycolumn is null or mycolumn ='' 

是否有這樣做的更好的辦法?

PS:我寧願不要做ANSI_NULLS OFF

感謝

回答

3

你不需要這個部分:and mycolum is not null因爲,如你所說,如果你的變量是NULL它仍然不會匹配。因此,我認爲,這其實是最好的方法:

select * 
from mytable 
where mycolumn = @myvar or mycolumn is null or mycolumn ='' 

如果你想這樣做,但更小的條件,你可以這樣做:

select * 
from mytable 
where mycolumn = @myvar or ISNULL(mycolumn,'') = '' 

但這不會使用索引(如果有的話)在mycolumn上。

+0

謝謝配合。我會將您的答覆標記爲已回答,因爲您還提供了替代方案。 – LEM 2012-03-16 17:35:49

2

你寫了

select * from mytable where (mycolumn = @myvar and mycolum is not null) or 
    mycolumn is null or mycolumn ='' 

因爲如果mycolumn爲NULL,這將是真實的,你不需要保護它使用and mycolum is not null反對,所以它可以簡化爲;

SELECT * FROM mytable 
WHERE mycolumn IS NULL OR mycolumn ='' OR mycolumn = @myvar 
10

如果你想在列完全相同的參數(包括空值)

DECLARE @myVariable varchar(10) 

SELECT * 
FROM mytable 
WHERE ((@myVariable IS NULL AND myColumn IS NULL) OR myColumn = @myVariable) 
相關問題