通过将逗号分隔列表与逗号分隔列表进行匹配来筛选行

2022-07-20 00:00:00 sql sql-like sql-server sql-server-2012

我有下表

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, ',%')
)

相关文章