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

问题描述 投票:1回答:4

我有下表

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

谢谢

sql sql-server sql-server-2012
4个回答
2
投票

您可以将like运算符用于concat(',', col2, ',')

select * from tablename
where 
  concat(',', col2, ',') like '%,ABS,%'
  or
  concat(',', col2, ',') like '%,MCM,%'

所以',ACA,ABS,PHR,' like '%,ABS,%'回归true


2
投票

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

-1
投票

尝试这样的事情。

SELECT *
FROM myTable
WHERE Col2 LIKE '%ABS%'
OR Col2 LIKE '%MCM%'
© www.soinside.com 2019 - 2024. All rights reserved.