当前位置: 代码迷 >> Oracle技术 >> 怎么根据分隔符一行转多行
  详细解决方案

怎么根据分隔符一行转多行

热度:393   发布时间:2016-04-24 08:05:26.0
如何根据分隔符一行转多行?
有个表是这样:
1                            2
a,b,c,d                  h

要变成

1     2
a     h
b     h
c     h
d     h

该怎么办?
越简便越好

------解决思路----------------------
--方法1
SELECT
substring(a.[1],b.number,charindex(',',a.[1]+',',b.number)-b.number)[1]
,[2]
from [TB] a
join master..spt_values b on b.type='P'
where charindex(',',','+a.[1],b.number)=b.number
--方法2
SELECT T2.V [1],T1.[2] FROM
(SELECT [2],CONVERT(XML,'<V>'+REPLACE([1],',','</V><V>')+'</V>')VS FROM TB)T1
CROSS APPLY(SELECT N.V.value('.','NVARCHAR(50)')V FROM T1.VS.nodes('//V')N(V))T2

------解决思路----------------------
下面语句是拆分字段A,参考下吧,这类拆分写法基本都是固定的
select REGEXP_SUBSTR(A, '[^,]+', 1, LEVEL) A,B,C
from T
CONNECT BY LEVEL <= REGEXP_COUNT(A, '[^,]+')
and rowid= prior rowid
and prior dbms_random.value is not null;

------解决思路----------------------
select ,regexp_substr('李四,张三,王五,赵六','([^,]+)',1,rownum) 
from dual 
connect by 
rownum<(length(regexp_replace('李四,张三,王五,赵六','[^,]',''))+2)
  相关解决方案