1、需求:

t1表:

id
--------------------------
1,2,3,4,5
 

t2表:

id          name
----------- ----------
1           John
2           Robot
3           Mary
 

期望得到结果:

1John,2Robot,3Mary,4,5 

2、实现

方法一:

字符串处理--根据key值进行replacecreate table t1
字符串处理--根据key值进行replace(
字符串处理--根据key值进行replace    id 
varchar(100)
字符串处理--根据key值进行replace);
字符串处理--根据key值进行replace
字符串处理--根据key值进行replace
insert into t1 select '1,2,3,4,5'
字符串处理--根据key值进行replace
字符串处理--根据key值进行replace
create table t2
字符串处理--根据key值进行replace(
字符串处理--根据key值进行replace    id 
int,name varchar(10)
字符串处理--根据key值进行replace);
字符串处理--根据key值进行replace
go
字符串处理--根据key值进行replace
字符串处理--根据key值进行replace
insert into t2 select 1,'John';
字符串处理--根据key值进行replace
insert into t2 select 2,'Robot';
字符串处理--根据key值进行replace
insert into t2 select 3,'Mary';
字符串处理--根据key值进行replace
go
字符串处理--根据key值进行replace
字符串处理--根据key值进行replace
create function f_str(@id varchar(1000))
字符串处理--根据key值进行replace
returns varchar(1000)
字符串处理--根据key值进行replace
as
字符串处理--根据key值进行replace    
begin
字符串处理--根据key值进行replace        
set @id=','+@id+','
字符串处理--根据key值进行replace        
select @id=replace(@id,','+rtrim(id)+',',','+rtrim(id)+name+','from t2
字符串处理--根据key值进行replace        
set @id=substring(@id,2,len(@id)-2)
字符串处理--根据key值进行replace
字符串处理--根据key值进行replace        
return @id
字符串处理--根据key值进行replace    
end
字符串处理--根据key值进行replace
go
字符串处理--根据key值进行replace 
字符串处理--根据key值进行replace
select dbo.f_str(id) as name from t1;
字符串处理--根据key值进行replace
字符串处理--根据key值进行replace
drop function f_str;
字符串处理--根据key值进行replace
drop table t1,t2;
字符串处理--根据key值进行replace

方法二: 

字符串处理--根据key值进行replace-- declaration
字符串处理--根据key值进行replace
declare @sourceStr varchar(1000), @tempStr varchar(1000), @ret varchar(1000)
字符串处理--根据key值进行replace
set @sourceStr = '1,3,5,10,15,20,24,25,30';
字符串处理--根据key值进行replace
set @tempStr = ',' + @sourceStr + ',';
字符串处理--根据key值进行replace
字符串处理--根据key值进行replace
-- create table 
字符串处理--根据key值进行replace
create table userlist
字符串处理--根据key值进行replace(
字符串处理--根据key值进行replace    rowid 
varchar(20), userid varchar(10), username varchar(10)
字符串处理--根据key值进行replace);
字符串处理--根据key值进行replace
字符串处理--根据key值进行replace 
字符串处理--根据key值进行replace
-- insert data
字符串处理--根据key值进行replace
insert into userlist
字符串处理--根据key值进行replace
select row_number() over(order by userid) as rowid, userid, username
字符串处理--根据key值进行replace
from 
字符串处理--根据key值进行replace(
字符串处理--根据key值进行replace    
select 3 as userid, 'Kim' as username union all 
字符串处理--根据key值进行replace    
select 10,'John' union all
字符串处理--根据key值进行replace    
select 15,'Robot' union all
字符串处理--根据key值进行replace    
select 24,'Mary' 
字符串处理--根据key值进行replace) t;
字符串处理--根据key值进行replace
字符串处理--根据key值进行replace
字符串处理--根据key值进行replace
-- replace in loop
字符串处理--根据key值进行replace
with replaced(idstring, rowid) as 
字符串处理--根据key值进行replace(
字符串处理--根据key值进行replace    
select replace(idstring, ',' + userid + ','',' + userid + username + ','), rowid
字符串处理--根据key值进行replace    
from 
字符串处理--根据key值进行replace    (
字符串处理--根据key值进行replace        
select @tempStr as idstring
字符串处理--根据key值进行replace    ) a
字符串处理--根据key值进行replace    
join userlist b 
字符串处理--根据key值进行replace    
on (charindex(userid, idstring) > 0and b.rowid = 1
字符串处理--根据key值进行replace
字符串处理--根据key值进行replace    
union all
字符串处理--根据key值进行replace
字符串处理--根据key值进行replace    
select replace(idstring, ',' + userid + ','',' + userid + username + ','), b.rowid
字符串处理--根据key值进行replace    
from replaced a
字符串处理--根据key值进行replace    
join userlist b
字符串处理--根据key值进行replace    
on (charindex(userid, idstring) > 0and (b.rowid = a.rowid + 1)
字符串处理--根据key值进行replace)
字符串处理--根据key值进行replace
select @ret = substring(idstring, 2len(idstring) - 2from replaced;
字符串处理--根据key值进行replace
字符串处理--根据key值进行replace
-- show result
字符串处理--根据key值进行replace
print(@ret);
字符串处理--根据key值进行replace
字符串处理--根据key值进行replace
-- clear temporary
字符串处理--根据key值进行replace
drop table userlist;

 

相关文章: