假设我有一个数据
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:如果帖子不应该发布,请告诉我删除帖子,而不是标记帖子。
答案 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,',')