SQL在Where子句中使用Case为null值

时间:2013-08-28 16:25:56

标签: sql sql-server-2008-r2 null case where

我有一个SQL查询,我试图在我的选择中包含null响应的可能性。

最终,这将最终出现在SSRS报告中。

此查询正常,但p.ReferralReason中的任何空值都将始终返回。如果@Reason的值不是'%',我希望不返回空值:

     DECLARE @Reason varchar(100)
     SET @Reason = 'Lost To Care'


     SELECT p.Person_ID, P.Person_Name, p.ReferralReason 
     FROM VIEW_Patient p
     WHERE 
        p.ReferralReason like '%' + @Reason + '%'

我想将所有原因纳入@Reason = '%' 如果@Reason设置为'%',我想包含空值,但如果将@Reason设置为其他任何内容,我不想包含空值。

这是我尝试过的,但它不起作用:

     DECLARE @Reason varchar(100)
     SET @Reason = '%'


     SELECT p.Person_ID, P.Person_Name, p.ReferralReason 
     FROM VIEW_Patient p
     WHERE 
        case   
            when @Reason = '%' then (p.ReferralReason like '%' + @Reason + '%' or p.ReferralReason is null)
            else p.ReferralReason like '%' + @Reason + '%'
        end 

MS SQL Server 2008 R2。

1 个答案:

答案 0 :(得分:1)

如果NULL值替换为空字符串,则它们将匹配完全由%组成的模式,但不包含%所包围的其他字符串

SELECT p.Person_ID,
       P.Person_Name,
       p.ReferralReason
FROM   VIEW_Patient p
WHERE  ISNULL(p.ReferralReason, '') LIKE '%' + @Reason + '%'