从sql中具有csv值的列中查找

时间:2013-03-14 10:07:41

标签: sql-server csv

我在数据库中有一个列(数据),其值为

id     name     data
1     jatin    1,11,15
2     harsh     3,5,11

如果我想获取数据列中包含11个人的姓名,我该怎么办?

感谢

2 个答案:

答案 0 :(得分:0)

您可以使用此功能:

CREATE FUNCTION CSV2Table (@var VARCHAR(max))
RETURNS TABLE
AS
RETURN (
        -- Recursive CTE
        WITH CSV(pop, variable) AS (
                -- Base case
                SELECT CASE 
                        WHEN charindex(',', @var) > 0
                            THEN substring(@var, 1, charindex(',', @var) - 1)
                        ELSE @var
                        END,
                    CASE 
                        WHEN charindex(',', @var) > 0
                            THEN substring(@var, charindex(',', @var) + 1, len(@var) - charindex(',', @var) + 1)
                        ELSE ''
                        END

                UNION ALL

                -- Recursive
                SELECT CASE 
                        WHEN charindex(',', CSV.variable) > 0
                            THEN substring(CSV.variable, 1, charindex(',', CSV.variable) - 1)
                        ELSE CSV.variable
                        END,
                    CASE 
                        WHEN charindex(',', CSV.variable) > 0
                            THEN substring(CSV.variable, charindex(',', CSV.variable) + 1, len(CSV.variable) - charindex(',', CSV.variable) + 1)
                        ELSE ''
                        END
                FROM CSV
                WHERE len(CSV.variable) > 0
                )
        SELECT pop
        FROM CSV
        )
GO

并执行以下操作:

SELECT * FROM <TABLE> WHERE EXISTS(SELECT TOP 1 1 FROM dbo.CSV2Table(data) WHERE POP = '11')

答案 1 :(得分:0)

在MS SQL Server上,您无法使用FIND_IN_SET函数,而是必须执行以下操作:

SELECT * FROM MyTable
WHERE ',' + Data + ',' LIKE '%,11,%'

我在数据列的前面和末尾添加了逗号,以确保LIKE运算符正常工作,即使“11”位于字符串的开头或结尾。