将逗号分隔的数据转换成行 - 一些澄清

时间:2016-09-07 17:34:28

标签: sql sql-server transpose

假设我有一个数据

ID   String
-------------------
1       John, Adam

基于以下查询将逗号分隔数据转换为行

 SELECT A.[ID],  
     Split.a.value('.', 'VARCHAR(100)') AS String  
 FROM  (SELECT [ID],  
         CAST ('<M>' + REPLACE([string], ',', '</M><M>') + '</M>' AS XML) AS String  
     FROM  TableA) AS A CROSS APPLY String.nodes ('/M') AS Split(a);

现在,我想知道在查询中提出'.'<M>的原因是什么?

PN:如果帖子不应该发布,请告诉我删除帖子,而不是标记帖子。

2 个答案:

答案 0 :(得分:0)

如果在CAST中打印出字符串,您将看到您的文本字符串已变为XML字符串。 '。'在split命令中,它只是一个开始解析XML的位置。

答案 1 :(得分:0)

如果是sql server 2016,你可以使用string_split

create table commasep
( 
id int identity(1,1)
,string nvarchar(100)
)

insert into commasep (string) values ('John, Adam'), ('test1,test2,test3')

select id, [value] as String from commasep 
 cross apply string_split(string,',')