SQL Использование регистра в предложении Where для значений NULL

У меня есть запрос SQL, который я пытаюсь включить в свой выбор с возможностью получения нулевых ответов.

В конечном итоге это будет отчет SSRS.

Этот запрос работает нормально, но всегда будут возвращаться любые нулевые значения в p.ReferralReason. Я бы хотел, чтобы значения NULL не возвращались, если значение @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.


person ajspacemanspiff    schedule 28.08.2013    source источник


Ответы (1)


Если значения NULL заменены пустыми строками, они будут соответствовать шаблонам, состоящим полностью из %, но не других строк, окруженных %

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