对于给定的字符串集(CSV字符串),如何编写用于在表的列中搜索特定字符串的存储过程。
喜欢:从xxx中选择*其中的标签('oscar','rahman','slumdog')
如何为该标签组合编写程序。
答案 0 :(得分:0)
首先,使用like
进行精确匹配是次优的。不妨使用=
,如果这样做,您可以使用IN
语法:
select * from xxx
where tags IN ('oscar', 'rahman', 'slumdog')
我猜您不是在寻找完全匹配,而是针对tags
字段包含所有标记的任何记录。
这将是这样的:
select * from xxx
where tags like '%oscar%'
and tags like '%rahman%'
and tags like '%slumdog%'
但这不会很快或表现不佳。
考虑将这种逻辑移植到您的应用程序中,在那里它可以更快更容易地完成。
修改强>
在评论之后 - 有很多关于如何parse delimited strings的示例。您可以将它们放在表格中,然后使用dynamic sql生成查询。
但是,这会有不好的性能,SQL Server将无法为这种事情缓存查询计划。正如我上面所说 - 考虑将这种逻辑转移到应用程序级别。
答案 1 :(得分:0)
创建逗号分隔的字符串...
然后,您可以将此列表应用于Oded示例,以便动态创建LIKE
子句的WHERE
部分。
DECLARE @pos int, @curruntLocation char(20), @input varchar(2048)
SELECT @pos=0
SELECT @input = 'oscar,rahman,slumdog'
SELECT @input = @input + ','
CREATE TABLE #tempTable (temp varchar(100) )
WHILE CHARINDEX(',',@input) > 0
BEGIN
SELECT @pos=CHARINDEX(',',@input)
SELECT @curruntLocation = RTRIM(LTRIM(SUBSTRING(@input,1,@pos-1)))
INSERT INTO #tempTable (temp) VALUES (@curruntLocation)
SELECT @input=SUBSTRING(@input,@pos+1,2048)
END
SELECT * FROM #tempTable
DR0P TABLE #tempTable