在SQL中用逗号分隔XML节点



我有一个这样的列内容:

自定义标签

<CustomTagsSerialiser>
<custom-tags>
<tag>Visas and travel</tag>
<tag>Explore Options</tag>
<tag>Consider – feasibility</tag>
</custom-tags>
</CustomTagsSerialiser>

我可以查询g.[CustomTags].value('(/CustomTagsSerializer//custom-tags([1]','nvarchar(500('(作为custom_Tag以获得类似的结果

Visas and travelExplore OptionsConsider – feasibility

但我希望结果有一个用逗号分隔的标签(在同一列中(,如下所示:

Visas and travel,Explore Options,Consider – feasibility

理想情况下,我希望通过使用XML功能/节点来实现而不是将其分解为+'、'+或合并

您可以参考Stuff和"For Xml Path"在Sql Server中的工作方式来回答这个问题。

尝试低于

SELECT
STUFF((SELECT 
',' + CTS.tag.value('(.)[1]', 'nvarchar(500)')
FROM 
Temp12345
CROSS APPLY
col1.nodes('/CustomTagsSerialiser/custom-tags/tag') AS CTS(tag)
FOR XML PATH('')
), 1, 1, '')

在不使用交叉应用的情况下应该是这样

STUFF((SELECT ',' + x.t.value('.', 'varchar(50)') FROM 
[g].CustomTags.nodes('//tag') x(t) FOR XML PATH('')), 1, 1, '') AS 'Custom Tags'

最新更新