2013-08-28 35 views
0

我有一個SQL查詢,我試圖在我的選擇中包含null響應的可能性。SQL在Where子句中對空值使用Case

最終,這將在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 = '%' 所有的原因,我想包括空值,但我不想包含null值,如果@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

如果NULL值與空字符串替換它們會匹配完全由%而不是其它字符串中的模式與%

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