我有下表
Col1 Col2
1 ACA,ABS,PHR
2 PHR
3 MCM
4 ABC
现在我想从这里过滤数据,所以如果我有一个过滤器参数,如'ABS,MCM'
我想只获得至少有一个匹配代码的行。所以在这种情况下我应该得到过滤后的结果
Col1 Col2
1 ACA,ABS,PHR
2 MCM
现在我可以使用查询Select * from myTable where Col2 in ('ABS','MCM')
但它不会检索第一行ACA,ABS,PHR
。有人可以告诉我如何对代码进行文本搜索,只要一个代码在Col2中匹配,我就得到行,这样我就可以直接传入分隔列表,只要找到一个匹配就行了检索。
谢谢
您可以将like
运算符用于concat(',', col2, ',')
:
select * from tablename
where
concat(',', col2, ',') like '%,ABS,%'
or
concat(',', col2, ',') like '%,MCM,%'
所以',ACA,ABS,PHR,' like '%,ABS,%'
回归true
您可以简单地使用LIKE运算符,如下所示:
SELECT *
FROM mytable
WHERE Col2 LIKE '%ABS%' OR Col2 LIKE '%MCM%'
如果您希望接受逗号分隔值作为搜索输入,则可以使用STRING_SPLIT()(自SQL Server 2016起可用):
SELECT *
FROM mytable t
WHERE EXISTS (
SELECT 1
FROM (SELECT val FROM STRING_SPLIT('ABS, MCM', ',')) x
WHERE CONCAT(',', t.Col1, ',')
LIKE CONCAT('%,', x.val, ',%')
)
尝试这样的事情。
SELECT *
FROM myTable
WHERE Col2 LIKE '%ABS%'
OR Col2 LIKE '%MCM%'