我在数据库中有一个列(数据),其值如下
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,%'
我在 Data 列的前面和末尾添加了逗号,以确保 LIKE 运算符有效,即使“11”位于字符串的开头或结尾。
您可以使用此功能:
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')