Sqlsever 应用 xml.nodes 进行行和列的转换

本文介绍了如何在SQLServer中使用xml.nodes方法将逗号分隔的字符串转换为数据表的行。通过示例代码,演示了转换过程,并展示了如何运用此方法进行字符串截取。

现在有一个用逗号分割的字符串,需要把每个分割的数据转换到数据表的行中,这时可以使用xml.nodes方法。

上代码:

--定义源数据
DECLARE @str NVARCHAR(500)='12,112,256,667,569'
--定义xml文本形式
DECLARE @xmlstr NVARCHAR(500)
--定义xml变量
DECLARE @xml XML
--把字符串组装成xml数据形式
SET @xmlstr='<root><col>'+@str+'</col></root>'
SET @xml=CAST(REPLACE(@xmlstr,',','</col><col>') AS XML)
--使用xml.nodes方法
SELECT t.c.value('.','nvarchar(100)') FROM @xml.nodes('/root/col') t(c)

输出结果:

运用这种方法还可以进行字符串的截取

案例:

--取前几条记录,如'10,102,10254,103265,541,2154,41,156'中第四个','前的字符串

DECLARE @sourceStr NVARCHAR(MAX)
DECLARE @splitStr NVARCHAR(10)
SET @sourceStr='10,102,10254,103265,541,2154,41,156'
SET @splitStr=','
DECLARE @xml XML
SET @xml=CAST(REPLACE('<ROOT><X>'+@sourceStr+'</X></ROOT>',@splitStr,'</X><X>') AS XML)

SELECT TOP(3) Result+',' AS [text()]
FROM 
(
 SELECT T.C.value('.','varchar(20)') AS Result 
 FROM @xml.nodes('/ROOT/X') T(C)
) AS T1 
FOR XML PATH('')

输出结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值