データベースに次のような値を持つ列(データ)があります
id name data
1 jatin 1,11,15
2 harsh 3,5,11
データ列に 11 がある人の名前を取得したい場合はどうすればよいですか??
ありがとう
データベースに次のような値を持つ列(データ)があります
id name data
1 jatin 1,11,15
2 harsh 3,5,11
データ列に 11 がある人の名前を取得したい場合はどうすればよいですか??
ありがとう
MS SQL Server では FIND_IN_SET 関数を使用できず、代わりに次のようにする必要があります。
SELECT * FROM MyTable
WHERE ',' + Data + ',' LIKE '%,11,%'
「11」が文字列の先頭または末尾にある場合でも、LIKE 演算子が確実に機能するように、Data 列の前後にカンマを追加しました。
この機能を使用できます:
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')