TSQL如果不为null则

时间:2014-06-09 19:13:57

标签: sql sql-server tsql

我在where子句中有这个陈述:

(A.[subject] LIKE '%'+@meetingSubject+'%')

如果@meetingSubject不为空,我只希望搜索此内容。

截至目前,它在@meetingSubject为空时返回所有记录

我怎样才能做到这一点?

5 个答案:

答案 0 :(得分:2)

问题是"空"而不是" NULL"。如果值为NULL,则表达式将失败,并且不会返回任何记录。这不是OP描述的行为。因此,我认为你正在寻找:

(A.[subject] LIKE '%'+@meetingSubject+'%' AND @meetingSubject <> '')

答案 1 :(得分:1)

case也不仅仅在NULL为空时排除空字符串

(ISNULL(@meetingSubject, '') <> '' and A.[subject] LIKE '%'+@meetingSubject+'%')

答案 2 :(得分:0)

http://msdn.microsoft.com/en-us/library/ms188795.aspx

这可能会做你想要的:

 ( @meetingSubject IS NOT NULL and @meetingSubject != '' and A.[subject] LIKE '%'+@meetingSubject+'%')  

答案 3 :(得分:0)

这应该是一种更清洁的方法,但Gordon Linoff answer would work as well

A.[Subject] like '%' + NULLIF(@meetingSubject, '') + '%'

可读性以来的清洁。

答案 4 :(得分:-2)

我不认为@meetingSubject为空 我认为@meetingSubject是'' 在TSQL中它是不一样的

第一个@var = null;没有找到。

declare @var varchar(100)
declare @search varchar(100)
set @search = 'searchvaluesting'
set @var = null;
select '%' + @var + '%';
select 'found' where @search like '%' + @var + '%';  -- returns nothing
select 'found' where @search like '%' + @var + '%' and @var <> '';  -- returns nothing
set @var = '';
select '%' + @var + '%';
select 'found' where @search like '%' + @var + '%' and @var <> '';  -- returns nothing
set @var = '  ';
select '%' + @var + '%', LEN(@var);
select 'found' where @search like '%' + @var + '%' and @var <> '';  -- returns nothing
set @var = 'value';
select '%' + @var + '%';
select 'found' where @search like '%' + @var + '%' and @var <> '';  -- returns found