先自定义一个简单的表(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
当然网上还有其他方法,个人感觉这两种方法更适合自己,简单易懂!