如何在 SQL 服务器 (SSMS) 中创建 'Like' + 'In' 查询

How to create a 'Like' + 'In' query in SQL Server (SSMS)

我正在寻找一种方法来创建包含以下功能的查询:'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" 关键字一起使用,所以它迫使我寻找完整的字符串而不是子字符串。

有什么想法或方法吗?

我能想到的唯一方法如下:

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'

使用您要搜索的术语(或 table 变量、CTE 或其他)预填充临时文件 table。然后加入,但使用 like 而不是相等运算符。

select *
from myTable a
inner join #terms b
   on a.myField like '%' + b.term + '%'

还有一个选项是传递分隔字符串

例子

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

为什么不直接使用 or 运算符;

SELECT ColumnName 
FROM MyTable 
WHERE ColumnName LIKE '%substring1%' OR ColumnName LIKE '%substring2%' OR ColumnName LIKE '%substring3%'