拆分字符串(将ID串用名称串显示)

select * from uf_StrSplit('|5376|86080|T009|A095002|','|')


CREATE  FUNCTION uf_StrSplit
(@origStr varchar(7000),  --待拆分的字符串
 @markStr varchar(100))   --拆分标记,如','
RETURNS @splittable table
(
str_id   varchar(4000) NOT NULL, --编号ID
string   varchar(2000) NOT NULL --拆分后的字符串
)
AS
BEGIN
 declare @strlen int,@postion int,@start int,@sublen int,@TEMPstr varchar(200),@TEMPid int
 SELECT @strlen=LEN(@origStr),@start=1,@sublen=0,@postion=1,@TEMPstr='',@TEMPid=0
 
 if(RIGHT(@origStr,1)<>@markStr )
 begin
  set @origStr = @origStr + @markStr
 end
 WHILE((@postion<=@strlen) and (@postion !=0))
 BEGIN
  IF(CHARINDEX(@markStr,@origStr,@postion)!=0)
  BEGIN
   SET @sublen=CHARINDEX(@markStr,@origStr,@postion)-@postion;
  END
  ELSE
  BEGIN
   SET @sublen=@strlen-@postion+1;
 
  END
  IF(@postion<=@strlen)
  BEGIN
   SET @TEMPid=@TEMPid+1;
   SET @TEMPstr=SUBSTRING(@origStr,@postion,@sublen);
   INSERT INTO @splittable(str_id,string) values(@TEMPid,@TEMPstr)
   IF(CHARINDEX(@markStr,@origStr,@postion)!=0)
   BEGIN
    SET @postion=CHARINDEX(@markStr,@origStr,@postion)+1
   END
   ELSE
   BEGIN
    SET @postion=@postion+1
   END
  END
 END
 RETURN
END

 

 

 

--drop table #dd
declare @manager varchar(10),@codeid varchar(10),@codestr varchar(200),@managername varchar(30)

create table #dd(manager char(10),managername varchar(30),strid int,auditor varchar(10))

declare cur_xs_temp cursor for      
select project_manager,code_id,b.employee_name from projects a,employee b
where g_id=24 and a.project_manager=b.employee_id and b.islizhi<>1
select @manager='',@codestr='',@managername=''     
open cur_xs_temp     
fetch cur_xs_temp into @manager,@codestr,@managername
 while(@@fetch_status=0)     
 begin 
 insert into #dd(manager,managername,strid,auditor)
     select @manager as manager,@managername,* from uf_StrSplit(@codestr,'|')
  select @manager='',@codestr='',@managername=''
  fetch cur_xs_temp into @manager,@codestr,@managername
end
close cur_xs_temp   
deallocate cur_xs_temp

select a.*,b.employee_name
from #dd a,employee b
where a.auditor=b.employee_id  and a.manager<>a.auditor
order by a.manager,a.auditor

 

 

通过上面的方法可以实现将一个记录里的“id1|id2|id3”导出成表"name1""name2""name3"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值