查找与逗号分隔值相同的表sql连续的行

时间:2015-03-18 13:53:50

标签: sql sql-server sql-server-2008

我有一个包含逗号分隔值的表格,如

id locs
1  a,s,d,f
2  s,d,f,a
3  d,s,a,f
4  d,f,g,a
5  a,s,e
6  f,d
当我使用逗号分隔的id为1的字符串时,我需要在sql server中输出1,2,3,6。

这意味着我已经使用了id为1的loc并用逗号分隔,现在我想要所有包含id 1的分隔值的id。

注意:我知道我不必在表中保留逗号分隔值,但它发生了。

希望我对我的问题很清楚。

2 个答案:

答案 0 :(得分:0)

如果我理解正确,您需要从所选行的locs列返回至少包含一个逗号分隔值的所有行的id值。由于这是一个糟糕的数据库设计,因此这个问题只能是一个丑陋的解决方案。 首先创建一个用户定义的函数,将逗号分隔值拆分为一个表。有很多方法可以做到,this is the first that google found

DECLARE @Values varchar(max)
SELECT @Values = Locs 
FROM Table WHERE Id = @Id 

SELECT Id
FROM Table INNER JOIN dbo.Split(@Values) SplitedString
ON( '%,'+ SplitedString.s+',%' LIKE ',' + Locs + ',')

答案 1 :(得分:0)

declare @tb table (id int, locs varchar(50))
insert into @tb values(1,  'a,s,d,f'),
(2,'s,d,f,a'),
(3,'d,s,a,f'),
(4,'d,f,g,a'),
(5,'a,s,e'),
(6,'f,d')
declare @cta varchar(20)='s,d,f,a'
;with cte0(id,col2)
as
(
select id,t.c.value('.','varchar(max)') as col2 from (select id,x= cast('<t>'+replace(locs,',','</t><t>') +'</t>'  as xml) from @tb) a cross apply x.nodes('/t') t(c)
)
select distinct id from cte0 where  @cta  like '%'+col2+'%' and id not in( select distinct id from cte0 where @cta not like '%'+col2+'%')