通过将逗号分隔列表与逗号分隔列表进行匹配来筛选行
我有下表
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操作符,如下所示:
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, ',%')
)
相关文章