gpt4 book ai didi

sql-server - 在 SQL 中从 XML 中获取值时添加分隔符

转载 作者:行者123 更新时间:2023-12-03 17:02:20 24 4
gpt4 key购买 nike

我有以下 XML 代码片段,我正在尝试使用 SQL Server 以表格格式读取它。

declare @ProductXML varchar(max);
set @ProductXML = '<hashtable> <entry>
<string>host</string>
<string-array>
<string>csdfs</string>
</string-array>
</entry>
<entry> <string>dom</string><map-array>
<map>
<entry>
<string>thirdlevelentrey</string>
<vector>
<string>1in</string>
<string>2in</string>
<string>3in</string>
<string>4in</string>
<string>5in</string>
</vector>
</entry>
</map>
</map-array></entry>
</hashtable>'

DECLARE @xml xml

SELECT @xml = CAST(CAST(@ProductXML AS VARBINARY(MAX)) AS XML)

SELECT
x.Rec.query('./string').value('.', 'nvarchar(50)') AS 'Product Name',
x.Rec.query('./vector/string').value('.', 'nvarchar(50)') AS 'Product TLDs'
FROM
@xml.nodes('/hashtable/entry/map-array/map/entry') AS x(Rec)

我正面临第二列 Product TLDs 的问题。在矢量下,多行值合并为单个文本。我希望它们带有分隔符或带分隔符的文本,以便以后使用时可以识别它们。

如果有人可以帮我放置一个分隔符或分隔符,例如 1in|2in|3in 等等...

或者是否可以在子表中将 thirdlevelentry 视为一个表。

最佳答案

你可以使用

SUBSTRING(
x.Rec.query('for $string in ./vector/string/text()
return concat("|", $string)
').value('.', 'nvarchar(50)'),
2,50) AS [Product TLDs]

返回

1in |2in |3in |4in |5in

因此注入(inject)了一些额外的空间。如果您要连接的值不包含任何可以使用的空格

REPLACE(
x.Rec.query('for $string in ./vector/string/text()
return string($string)
').value('.', 'nvarchar(50)'),
' ','|') AS [Product TLDs]

返回

1in|2in|3in|4in|5in

关于sql-server - 在 SQL 中从 XML 中获取值时添加分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47733208/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com