declare @str1 varchar(100), @str2 varchar(100), @str3 varchar(100),@str varchar(500)
set @str1='aada,bbbf,ccc,'
set @str2='ddd,aaaaaa,fdsa'
set @str3='vvvvvv,aaabbbb'
set @str='fds,bbbf,eee,ddd,fff,hhhfg,dddde'
如今:
把@str1拆分成aada,bbbf,ccc三个元素,其中bbbf在@str里出现过
把@str2拆分成ddd,aaaaaa,fdsa三个元素,其中ddd在@str里也出现过
把@str3拆分成vvvvvv,aaabbbb两个元素,但是没有任何元素在@str里出现过
请问我怎样用程序实现这样一个结果
其实实际问题是这样的
我有一个数据表,里有个字段classid
其中一条纪录的数据,比如是:aada,bbbf,ccc
如今要得到这样一个结果集,将classid按照上面的拆分方式拆分,得到的数据,在@str里出现过(@str是外界传过来的一个参数)的记录找出来,请问我该怎样做?
---------------------------------------------------------------
declare @str varchar(500)
set @str='fds,bbbf,eee,ddd,fff,hhhfg,dddde'
create table 你的表 (classid varchar(100))
insert 你的表 values('aada,bbbf,ccc')
insert 你的表 values('ddd,aaaaaa,fdsa')
insert 你的表 values('vvvvvv,aaabbbb')
create table #临时表(a varchar(100))
declare @aaa varchar(8000)
set @aaa='insert #临时表 select * from (select '''+replace(@str,',','''as str union all select ''')+''') a'
exec(@aaa)
select * from 你的表 where exists (select 1 from #临时表 where ','+你的表.classid+',' like '%,'+a+',%')
go
drop table 你的表,#临时表
---------------------------------------------------------------
create table #t(
id varchar(10))
declare @str varchar(300)
set @str='fds,bbbf,eee,ddd,fff,hhhfg,dddde'
declare @i int
declare @len int
set @i = 1
set @str='fds,bbbf,eee,ddd,fff,hhhfg,dddde'+','
while @i < len(@str)
begin
insert #t select substring(@str,@i,charindex(',',@str,@i)-@i)
set @i = charindex(',',@str,@i)+1
end
select * from 数据表 A,#t B where charindex(B.id, A.classid) > 0
---------------------------------------------------------------
create table t (classid varchar(100))
insert t values('aada,bbbf,ccc')
insert t values('ddd,aaaaaa,fdsa')
insert t values('vvvvvv,aaabbbb')
declare @str varchar(500)
set @str='fds,bbbf,eee,ddd,fff,hhhfg,dddde'
select top 500 identity(int,1,1) as id into #t from sysobjects
select distinct A.* from t A,
( select substring(','+string+',',id+1,charindex(',',','+string+',',id+1)-id-1) as string
from (select @str as string) B,#t c
where substring(','+string+',',id,8000) like ',_%') D
where charindex(','+string+',',','+classid+',')>0
drop table #t
把#t建成固定表,更快。