转自:
https://blog.youkuaiyun.com/wang_xinyu/article/details/107365392
https://www.cnblogs.com/TulipsWill/p/11498859.html
1. 如下表:
2. 转换xml
1 |
|
1 |
|
3. 加个分隔符和去掉根节点。
1 |
|
4. 配合stuff函数使用,去掉第一个分隔符号。
1 |
|
5. STUFF ( character_expression , start , length ,character_expression )
character_expression:字符数据
start :指定删除和插入的开始位置
length :指定要删除的字符数
character_expression : 替换start 到 length 的字符数据
6. 转义字符正常显示
有时候我们的数据库中有尖括号,然后有用到xml的时候,sql会自动的把尖括号进行转义,但是我们不需要转义,并且对这个有要求要用到,这时候我们可以用value的形式来实现,测试数据:
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([ID] int,[Chemistry] nvarchar(47))
Insert #T
select 1,N'CaF<sub>2</sub>' union all
select 2,N'Al<sub>2</sub>O<sub>3<?sub>'
Go
--测试数据结束
用for xml path读取指标信息
SELECT
STUFF((
Select ','+Chemistry from #T FOR XML PATH('')),1,1,'')
读取的结果是这样的:
我们看到尖括号已经进行了转义,如果我们还想要尖括号,可以这样写:
SELECT
STUFF((
Select ','+Chemistry from #T FOR XML PATH(''),TYPE
).value('.','NVARCHAR(MAX)')
,1,1,'')
结果: