现在有一个用逗号分割的字符串,需要把每个分割的数据转换到数据表的行中,这时可以使用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('')
输出结果: