#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)