SQL替换字段字符串

  1. ----------------------------
  2. --Author:旋风
  3. --Date:2008-10-23 15:19:49
  4. --Version:V1.0
  5. --Memo:SQL替换字段字符串
  6. ----------------------------
  7. --> Test Data: [A]
  8. if object_id('[A]'is not null drop table [A]
  9. create table [A] ([AutoID] int,[IDStr] varchar(50))
  10. insert into [A]
  11. select 1,'1,2,3,4' union all
  12. select 2,'1,2'
  13. --> Test Data: [B]
  14. if object_id('[B]'is not null drop table [B]
  15. create table [B] ([AutoID] int,[Value] varchar(3))
  16. insert into [B]
  17. select 1,'AAA' union all
  18. select 2,'BBB' union all
  19. select 3,'CCC' union all
  20. select 4,'DDD'
  21. Go
  22. if object_id('S_str'is not null
  23.     drop function S_str
  24. go
  25. create function S_str(@str nvarchar(100))
    returns nvarchar(100)
    as
    begin
        set @str=','+@str+','--加上两边逗号
        select @str=replace(@str,','+rtrim([AutoID])+',',','+[Value]+',') from B
        --where  @str like '%,'+rtrim([AutoID])+',%'
        WHERE CHARINDEX(','+RTRIM([AutoID])+',',@str)>0
        return substring(@str,2,len(@str)-2)--去掉两边逗号
    end
    go
    --Code
    --SQL2000用函数
    select [AutoID],[Value]=dbo.S_str([IDStr]) from A
  26. --SQL2005用XML
  27. SELECT [AutoID],
  28.        [Value]=CAST(STUFF((
  29.               SELECT ','+[Value]
  30.               FROM B 
  31.               WHERE CHARINDEX(','+RTRIM([AutoID])+',',','+a.[IDStr]+',')>0
  32.               FOR XML PATH(''))
  33.               ,1,1,'') AS VARCHAR(20)) 
  34. FROM A AS a
  35. --Drop
  36. drop table [A]
  37. drop function S_str
  38. --Result
  39. /*
  40. AutoID      Value
  41. ----------- ----------------------------------------------------------------------------------------------------
  42. 1           AAA,BBB,CCC,DDD
  43. 2           AAA,BBB
  44. */
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值