Sql server 返回将CSV列与CSV搜索字符串匹配的行?

Sql server 返回将CSV列与CSV搜索字符串匹配的行?,sql-server,csv,Sql Server,Csv,我有一个数据库表,其中有一列存储逗号分隔的字符串值。 比如说 Row CSVColumn 1. value1, value2 2. value1, value3 3. value2, value4 我的搜索参数也是逗号分隔的,比如value2,value4 现在我想返回所有匹配搜索参数的行。在本例中,应返回第1行和第3行 有人能帮我写一个MS SQL查询吗 这个例子怎么样。我正在将字符串拆分为搜索字符串和CSV列的行 然后我就加入他们 我使用xml进行拆分,但您也可以为此

我有一个数据库表,其中有一列存储逗号分隔的字符串值。 比如说

Row   CSVColumn
1.    value1, value2
2.    value1, value3
3.    value2, value4
我的搜索参数也是逗号分隔的,比如value2,value4

现在我想返回所有匹配搜索参数的行。在本例中,应返回第1行和第3行


有人能帮我写一个MS SQL查询吗

这个例子怎么样。我正在将字符串拆分为搜索字符串和CSV列的行

然后我就加入他们

我使用xml进行拆分,但您也可以为此创建函数

DECLARE @CsvTable TABLE (Rowid INT, CsvColumn VARCHAR(MAX))

INSERT INTO @CsvTable SELECT '1', 'value1'
INSERT INTO @CsvTable SELECT '2', 'value1, value3'
INSERT INTO @CsvTable SELECT '3', 'value2, value4'

DECLARE @SearchText VARCHAR(20) = 'value2, value3' 

;WITH SearchTable AS (
    SELECT LTRIM(O.splitdata) AS Searchdata
    FROM (
        SELECT CAST('<X>'+replace(@SearchText,',','</X><X>')+'</X>' AS XML) AS XmlData
        ) AS xT
     CROSS APPLY
     ( 
         SELECT xdata.D.value('.', 'VARCHAR(50)') AS splitdata 
         FROM xT.XmlData.nodes('X') as xdata(D)
     ) O
), SplitTable AS (

    SELECT xT.Rowid,
     LTRIM(O.splitdata) AS splitdata
    FROM (
        SELECT T.Rowid, CAST('<X>'+replace(T.CsvColumn,',','</X><X>')+'</X>' AS XML) AS XmlData
        FROM @CsvTable AS T
        ) AS xT
     CROSS APPLY
     ( 
         SELECT xdata.D.value('.', 'VARCHAR(50)') AS splitdata 
         FROM xT.XmlData.nodes('X') as xdata(D)
     ) O

)
SELECT DISTINCT CT.*
FROM @CsvTable AS CT
INNER JOIN SplitTable AS SplitT 
    ON SplitT.RowID = CT.RowID
INNER JOIN SearchTable AS SrchT
    ON SrchT.Searchdata = SplitT.splitdata

如果可能的话,最好修复数据模型。多个值属于多行,而不是塞进一个SQL Server不知道其内容的字符串中。@Damien_不相信者我认为我无法修复数据模型。这是我的限制和要求!为什么不返回给定示例的第1行?@Darka Oops,我的输入错误。修好了。谢谢这个表中有多少数据?我考虑将表CSV列拆分成行,然后查找。