Sql server 此查询如何在sql server中将csv拆分为行?
我正在使用sql server 2012 这是一个问题Sql server 此查询如何在sql server中将csv拆分为行?,sql-server,Sql Server,我正在使用sql server 2012 这是一个问题 drop table #t create table #t(id int,name varchar(10)) insert into #t values(1,'a,b,c'),(2,'d,e') select A.id,split.a.value('.','varchar(10)') as string from (select id,cast('<M>'+replace([name],',','</M>
drop table #t
create table #t(id int,name varchar(10))
insert into #t values(1,'a,b,c'),(2,'d,e')
select A.id,split.a.value('.','varchar(10)') as string
from
(select id,cast('<M>'+replace([name],',','</M><M>')+'</M>' as xml) as string from #t) as A cross apply string.nodes('/M') as split(a)
我试图获得这里使用的查询逻辑,但无法理解它是如何工作的
有人能引导我理解这个故事吗
cast子句和split.a.value中的逻辑cast子句将字符串转换为XML片段,稍后由“nodes”方法使用。如果只运行子查询:
select id,cast('<M>'+replace([name],',','</M><M>')+'</M>' as xml) as string
from #t
您将得到以下结果:
id string
1 <M>a</M><M>b</M><M>c</M>
2 <M>d</M><M>e</M>
Node方法将XML数据拆分为关系形式。为了过分简化,Nodes方法提供了一个带有列“a”的表“Split”。Value方法最终将节点中的值转换为用于投影的varchar:
split.A.value'.'和'varchar10'可以解释为Table.Column.Valueroot到varchar10
有关更多信息,请参阅以下链接:
节点方法:
价值法: