2012-03-16 45 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) 
相关问题