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:替换节点,参数如果是'',将节点定义成空,如果是'xxx',节点定义成。这里不妨可以试下

SELECT * FROM TB01 FOR XML PATH 无参

SELECT * FROM TB01 FOR XML PATH('')

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

select 
    b.text     --4.查出text值
from 
    (select [text]=convert(xml,''+replace(@_text ,',','')+''))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

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

你可能感兴趣的:(SQLSERVER)