首页 > 解决方案 > 通过将逗号分隔列表与逗号分隔列表匹配来过滤行

问题描述

我有下表

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 中匹配,我就可以得到该行,这样我就可以直接传入分隔列表,只要找到一个匹配项,该行就是取回。

谢谢

标签: sqlsql-serversql-server-2012sql-like

解决方案


您可以简单地使用 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, ',%')
)

推荐阅读