在sql中检查列是否包含字符串

时间:2015-01-28 05:14:20

标签: sql sql-server

我有逗号分隔的字符串,如675,899,343,294,988

我的表格有像

这样的值
ID Values
1  56,78,485
2  90,343,398
3  756,46774,45,4
4  536,394,988

这里我想要的结果如下:ID 2,值343和ID 4,值988

2 个答案:

答案 0 :(得分:1)

在这里,您可以为每个Id分割值到每一行。

 ;WITH CTE AS
(
    --  Convert CSV to rows
    SELECT ID,LTRIM(RTRIM(Split.a.value('.', 'VARCHAR(100)'))) 'VALUES' 
    FROM  
    (
         -- To change ',' to any other delimeter, just change ',' before '</M><M>' to your desired one
         SELECT ID,CAST ('<M>' + REPLACE([Values], ',', '</M><M>') + '</M>' AS XML) AS Data 
         FROM YourTable    
    ) AS A 
    CROSS APPLY Data.nodes ('/M') AS Split(a)
)
SELECT *
FROM CTE 
WHERE (ID=2 AND [VALUES]='343') OR (ID=4 AND [VALUES]='988')

编辑:

如果您想获得匹配的ID,可以执行以下操作

样本表

SELECT * INTO #TEMP
FROM
( 
    SELECT 1 ID,  '56,78,485' [Values]
    UNION ALL
    SELECT 2,  '90,343,398'
    UNION ALL
    SELECT 3,  '756,46774,45,4'
    UNION ALL
    SELECT 4,  '536,394,988'
)TAB

<强> QUERY

DECLARE @STR VARCHAR(100)='675,899,343,294,988'

;WITH CTE1 AS
(
    SELECT LTRIM(RTRIM(Split.a.value('.', 'VARCHAR(100)'))) 'String' 
    FROM  
    (
         -- To change ',' to any other delimeter, just change ',' before '</M><M>' to your desired one
         SELECT CAST ('<M>' + REPLACE(@STR, ',', '</M><M>') + '</M>' AS XML) AS Data               
    ) AS A 
    CROSS APPLY Data.nodes ('/M') AS Split(a)
) 
,CTE2 AS
(
    --  Convert CSV to rows
    SELECT ID,LTRIM(RTRIM(Split.a.value('.', 'VARCHAR(100)'))) 'Values' 
    FROM  
    (
         -- To change ',' to any other delimeter, just change ',' before '</M><M>' to your desired one
         SELECT ID,CAST ('<M>' + REPLACE([Values], ',', '</M><M>') + '</M>' AS XML) AS Data 
         FROM #TEMP     
    ) AS A 
    CROSS APPLY Data.nodes ('/M') AS Split(a)
)
SELECT C2.*
FROM CTE1 c1
JOIN CTE2 C2 ON C1.String=C2.[VALUES] 

答案 1 :(得分:-2)

您可以使用

SELECT `id` FROM `table` WHERE `Values` IN(string)