Как создать запрос «Мне нравится» + «В» в SQL Server (SSMS) - PullRequest
0 голосов
/ 12 октября 2018

Я ищу способ создания запроса, который включает в себя функциональность ключевых слов «Like» и «In» вместе.Таким образом, с этим я смогу выполнить поиск нескольких подстрок в одном предложении вместо создания нескольких консультаций:

т.е.:

Вместо этого:

select * from MyTable where ColumnName like'%substring1%'
select * from MyTable where ColumnName like'%substring2%'
select * from MyTable where ColumnName like '%substring3%'

Я хочу сделать что-то вроде этого:

select * from MyTable where ColumnName in ('%substring1%','%substring2%','%substring3%')

Просто чтобы уточнить: подстановочный знак (%) недопустим или не работает вместе с ключевым словом "in", поэтому он заставляет меняискать полные строки вместо подстрок.

Любая идея или подход?

Ответы [ 4 ]

0 голосов
/ 12 октября 2018

Почему бы просто не использовать или оператор;

SELECT ColumnName 
FROM MyTable 
WHERE ColumnName LIKE '%substring1%' OR ColumnName LIKE '%substring2%' OR ColumnName LIKE '%substring3%'
0 голосов
/ 12 октября 2018

Предварительно заполните временную таблицу терминами, которые вы хотите найти (или табличной переменной, CTE или чем-то еще).Затем присоединитесь, но используйте like вместо оператора равенства.

select *
from myTable a
inner join #terms b
   on a.myField like '%' + b.term + '%'
0 голосов
/ 12 октября 2018

Еще один вариант - передать строку с разделителями

Пример

Declare @Search varchar(max) = 'John,Cappelletti,Some Other Value'

Select Distinct A.*
 From  MyTable  A
 Join  (
         Select RetSeq = Row_Number() over (Order By (Select null))
               ,RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)')))
         From  (Select x = Cast('<x>' + replace(@Search,',','</x><x>')+'</x>' as xml).query('.')) as A 
         Cross Apply x.nodes('x') AS B(i)
        ) B on charindex(RetVal,ColumnName)>0
0 голосов
/ 12 октября 2018

Единственный подход, который я могу придумать, заключается в следующем:

select * from MyTable where ColumnName like '%substring1%' or ColumnName like '%substring2%' or ColumnName like '%substring3%'

Если у вас есть дополнительные условия, просто сгруппируйте их.

select * from MyTable where (ColumnName like '%substring1%' or ColumnName like '%substring2%' or ColumnName like '%substring3%') and AnotherColumn='string'
...