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,%'

「11」が文字列の先頭または末尾にある場合でも、LIKE 演算子が確実に機能するように、Data 列の前後にカンマを追加しました。

于 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 に答える