2

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

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

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

谢谢

4

2 回答 2

1

在 MS SQL Server 上,您不能使用 FIND_IN_SET 函数,而必须这样做:

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

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

于 2013-10-03T08:22:33.257 回答
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')
于 2013-08-22T13:48:13.140 回答