Как сравнить столбец varchar с несколькими значениями

#sql-server-2016

#sql-server-2016

Вопрос:

Есть ли способ сравнить столбец со списком выражений? Это мой текущий код:

 WHERE    
   [Description] like 'c:DEC%' 
   or [Description] like 'c:DTI%' 
   or [Description] like 'c:DCT%' 
   or [Description] like 'c:DTB%' 
   or [Description] like 'c:DTX%' 
 

Я хотел бы иметь что-то вроде этого:

 Where [Description] like ('c:DTI%','c:DCT%','c:DTB%','c:DTX%')
 

Комментарии:

1. В чем проблема с текущим запросом?

2. У меня есть не только 5 сравнений, но и более сотни. Чем длиннее запрос, тем запутаннее.

3. Если вы передаете их из клиентского приложения, поместите их в табличный параметр (в основном табличную переменную)

Ответ №1:

поместите его во временную таблицу

 create table #temp
(
    descript varchar(100)
)

insert into #temp (descript) values
('c:DTI%') , ('c:DCT%'), ('c:DTB%'), ('c:DTX%');

SELECT *
FROM   yourtable d 
       INNER JOIN #temp t    ON    d.[Description] LIKE t.descript 
 

Комментарии:

1. Спасибо, это было именно то, что мне было нужно!

Ответ №2:

Я бы предположил, что это лучше всего реализовать с помощью корреляции, а не нескольких жестко запрограммированных условий, особенно если у вас их сотни!

У вас может быть таблица — постоянная или table-valued-parameter переданная вашей процедуре, и реализовать фильтрацию с помощью exists

 from MyTable t
where ...
and exists (select * from LookupTable l where t.[description] like l.MatchText)