sql 服务器 - xml 查询 - 连接 - 添加 space
sql server - xml query - concat - adding space
我想把一个xml字符串转换成sql-table分号分隔
declare @x xml --for example
set @x = '<root><row><a>a1</a><b>b2</b></row><row><a>aa1</a><b>bb2</b></row></root>'
SELECT T.c.query('.').query('for $i in row/*/text() return concat($i,";")').value('.', 'nvarchar(max)') AS result
FROM @x.nodes('root/row') T(c)
结果:
a1; b2;
aa1; bb2;
我想要的结果:(没有space)
a1;b2;
aa1;bb2;
>> 奖励:删除最后一个分号
a1;b2
aa1;bb2
谢谢!
REPLACE
、REVERSE
和 STUFF
的组合是我实现此目标的方法:
declare @x xml --for example
set @x = '<root><row><a>a1</a><b>b2</b></row><row><a>aa1</a><b>bb2</b></row></root>'
SELECT reverse(stuff(reverse(replace(T.c.query('.').query('for $i in row/*/text() return concat($i,";")').value('.', 'nvarchar(max)'), ' ', '')), 1, 1, '')) AS result
FROM @x.nodes('root/row') T(c)
可能有更好的方法来去除空格,因为这也会替换 XML 节点值中的所有空格。
declare @x xml --for example
set @x = '<root><row><a>a1</a><b>b2</b></row><row><a>aa1</a><b>bb2</b></row></root>'
SELECT reverse(stuff(reverse(replace(T.c.query('.').query('for $i in row/*/text() return concat($i,";")').value('.', 'nvarchar(max)'), '; ', ';')), 1, 1, '')) AS result
FROM @x.nodes('root/row') T(c)
这可以更容易地完成:
DECLARE @xml XML='<root>
<row>
<a>a1</a>
<b>b2</b>
</row>
<row>
<a>aa1</a>
<b>bb2</b>
</row>
</root>';
SELECT (
STUFF(
(
SELECT ';' + v.value('.','nvarchar(max)')
FROM r.nodes('*') AS B(v)
FOR XML PATH('')
),1,1,'')
)
FROM @xml.nodes('/root/row') AS A(r)
我想把一个xml字符串转换成sql-table分号分隔
declare @x xml --for example
set @x = '<root><row><a>a1</a><b>b2</b></row><row><a>aa1</a><b>bb2</b></row></root>'
SELECT T.c.query('.').query('for $i in row/*/text() return concat($i,";")').value('.', 'nvarchar(max)') AS result
FROM @x.nodes('root/row') T(c)
结果:
a1; b2;
aa1; bb2;
我想要的结果:(没有space)
a1;b2;
aa1;bb2;
>> 奖励:删除最后一个分号
a1;b2
aa1;bb2
谢谢!
REPLACE
、REVERSE
和 STUFF
的组合是我实现此目标的方法:
declare @x xml --for example
set @x = '<root><row><a>a1</a><b>b2</b></row><row><a>aa1</a><b>bb2</b></row></root>'
SELECT reverse(stuff(reverse(replace(T.c.query('.').query('for $i in row/*/text() return concat($i,";")').value('.', 'nvarchar(max)'), ' ', '')), 1, 1, '')) AS result
FROM @x.nodes('root/row') T(c)
可能有更好的方法来去除空格,因为这也会替换 XML 节点值中的所有空格。
declare @x xml --for example
set @x = '<root><row><a>a1</a><b>b2</b></row><row><a>aa1</a><b>bb2</b></row></root>'
SELECT reverse(stuff(reverse(replace(T.c.query('.').query('for $i in row/*/text() return concat($i,";")').value('.', 'nvarchar(max)'), '; ', ';')), 1, 1, '')) AS result
FROM @x.nodes('root/row') T(c)
这可以更容易地完成:
DECLARE @xml XML='<root>
<row>
<a>a1</a>
<b>b2</b>
</row>
<row>
<a>aa1</a>
<b>bb2</b>
</row>
</root>';
SELECT (
STUFF(
(
SELECT ';' + v.value('.','nvarchar(max)')
FROM r.nodes('*') AS B(v)
FOR XML PATH('')
),1,1,'')
)
FROM @xml.nodes('/root/row') AS A(r)