如何在 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%'
我正在寻找一种方法来创建包含以下功能的查询:'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%'