如何从字符串中获取第二个,第三个和更多值以及用逗号分隔的字段?

时间:2017-05-05 20:28:31

标签: sql substring

declare @v varchar(max) = '1,11,111,1111' 

我需要这样的输出(在单独的行中):

    1
   11
  111
 1111

我可以使用第一个和最后一个:

    select Substring(@v,0,CharIndex(',',@v)) 
    select substring(@v, CHARINDEX(',', @v, CHARINDEX(',', @v, CHARINDEX(',', @v)+1)+1)+1, len(@v)) 

但是,如何分别获得第二个和第三个子串?

1 个答案:

答案 0 :(得分:1)

您可以使用替换...

declare @v varchar(max) = '1,11,111,1111' 
select replace(@v,',',' ')

如果您正在寻找多行,那么

--For SQL Server >= 2016
select * from string_split(@v,',')

--For any version of sql server
DECLARE @xml as xml
SET @xml = cast(('<X>'+replace(@v,',' ,'</X><X>')+'</X>') as xml)
SELECT  N.value('.', 'varchar(MAX)') as value FROM @xml.nodes('X') as T(N)