日期:2014-05-16  浏览次数:20732 次

如何根据指定的字符串检索出包含位置和字符均相同的字符串
如:指定字符串为 A:12,B:00,C:00,D:3

数据库中字符串为:
A:12,B:1,C:11,D:3
A:11,B:00,C:11,D:3
A:00,B:00,C:00,D:3
A:00,B:1,C:11,D:77
A:00,B:11,C:22,D:77


要求输出:
A:12,B:1,C:11,D:3                ------  AD和指定字符串位置和字符相同
A:11,B:00,C:11,D:3             ------- BD和指定字符串位置和字符相同
A:00,B:00,C:00,D:3            -------- BCD和指定字符串位置和字符相同


------解决方案--------------------
上面的有Bug,用下面这个:

declare @param varchar(20)='A:12,B:00,C:00,D:7'
declare @xmlparam xml = convert(xml,'<c>,'+REPLACE(@param,',',',</c><c>,')+',</c>')

;with t as(
select data from(
values('A:12,B:1,C:11,D:3'),('A:11,B:00,C:11,D:3'),('A:00,B:00,C:00,D:3'),
('A:00,B:1,C:11,D:77'),('A:00,B:11,C:22,D:77')) t(data))
select distinct t.data 
from t cross apply @xmlparam.nodes('c') t1(condition)
where ','+t.data+',' like '%'+condition.value('.','varchar(20)')+'%'