我在数据库中有一个列(数据),其值为
id name data
1 jatin 1,11,15
2 harsh 3,5,11
如果我想获取数据列中包含11个人的姓名,我该怎么办?
感谢
答案 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”位于字符串的开头或结尾。