t-sql建临时表,处理字符串

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建成固定表,更快。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值