• 字符串处理根据key值进行replace


    1、需求:

    t1表:

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

    t2表:

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

    期望得到结果:

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

    2、实现

    方法一:

    create table t1
    (
        id 
    varchar(100)
    );

    insert into t1 select '1,2,3,4,5'

    create table t2
    (
        id 
    int,name varchar(10)
    );
    go

    insert into t2 select 1,'John';
    insert into t2 select 2,'Robot';
    insert into t2 select 3,'Mary';
    go

    create function f_str(@id varchar(1000))
    returns varchar(1000)
    as
        
    begin
            
    set @id=','+@id+','
            
    select @id=replace(@id,','+rtrim(id)+',',','+rtrim(id)+name+','from t2
            
    set @id=substring(@id,2,len(@id)-2)

            
    return @id
        
    end
    go
     
    select dbo.f_str(id) as name from t1;

    drop function f_str;
    drop table t1,t2;

    方法二: 

    -- declaration
    declare @sourceStr varchar(1000), @tempStr varchar(1000), @ret varchar(1000)
    set @sourceStr = '1,3,5,10,15,20,24,25,30';
    set @tempStr = ',' + @sourceStr + ',';

    -- create table 
    create table userlist
    (
        rowid 
    varchar(20), userid varchar(10), username varchar(10)
    );

     
    -- insert data
    insert into userlist
    select row_number() over(order by userid) as rowid, userid, username
    from 
    (
        
    select 3 as userid, 'Kim' as username union all 
        
    select 10,'John' union all
        
    select 15,'Robot' union all
        
    select 24,'Mary' 
    ) t;


    -- replace in loop
    with replaced(idstring, rowid) as 
    (
        
    select replace(idstring, ',' + userid + ','',' + userid + username + ','), rowid
        
    from 
        (
            
    select @tempStr as idstring
        ) a
        
    join userlist b 
        
    on (charindex(userid, idstring) > 0and b.rowid = 1

        
    union all

        
    select replace(idstring, ',' + userid + ','',' + userid + username + ','), b.rowid
        
    from replaced a
        
    join userlist b
        
    on (charindex(userid, idstring) > 0and (b.rowid = a.rowid + 1)
    )
    select @ret = substring(idstring, 2len(idstring) - 2from replaced;

    -- show result
    print(@ret);

    -- clear temporary
    drop table userlist;
  • 相关阅读:
    脚本——1-100的和
    脚本——删除文件为0大小的文件
    脚本——ping网址
    脚本——大于5k的文件有
    脚本——九九乘法表
    第十天:小数与随机数
    第九天:单元测试
    第八天:错误异常处理
    第七天(1):包与模块管理
    第七天(2):面向对象编程
  • 原文地址:https://www.cnblogs.com/aspsmile/p/1261781.html
Copyright © 2020-2023  润新知