SQLSERVER 带分隔的字符串与列表相互转换

先自定义一个简单的表(TB01)数据:

select TB01.CC from (select '香港' CC union all select '上海' CC union all select '北京' CC) TB01 

1、列表某列数据转逗号分隔的字符串(这里的分隔符任意,以英文逗号举例)

DECLARE @_text VARCHAR(MAX)

SET @_text = STUFF((SELECT ','+TB01.CC FROM TB01 for xml path('')),1,1,'') 

 这里两个知识点:

a、stuff函数:作用是去除拼接的字符串最前面的逗号

b、for xml path:替换节点<row>,参数如果是'',将节点定义成空,如果是'xxx',节点定义成<xxx>。这里不妨可以试下

SELECT * FROM TB01 FOR XML PATH 无参

SELECT * FROM TB01 FOR XML PATH('')

2、逗号分隔的字符串转列表数据

select 
    b.text     --4.查出text值
from 
    (select [text]=convert(xml,'<root><v>'+replace(@_text ,',','</v><v>')+'</v></root>'))a    
               --1.将逗号用xml标签替换,然后转换成xml格式
outer apply    --2.做关联查询
    (select [text]=C.v.value('.','nvarchar(100)') from a.[text].nodes('/root/v')C(v))b
               --3.将xml内容按照标签替换拆分节点并查出每个节点的value值标记为text

当然网上还有其他方法,个人感觉这两种方法更适合自己,简单易懂!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值