Oracle SQL - 如何将逗号拆分限制为行
Oracle SQL - how to Limit the comma splitting to rows
我有这样的数据,
ID RPT_NAME CSV_STRING
------------------------------
abc123 Test1 AA,BB,AC,AD,EF,GG,FG,FD,DF,GG,AA,PL,KI,LO,TT,TE,LF,FG
abc456 Test2 GF,DS,SA,RE,EW,QQ,QW
def123 Test3 HH
我希望将逗号拆分限制为固定数量的逗号行。 Post 那,我将获取下一组记录,直到所有记录都以 6 组为一组推送到行中。
例如,我的偏移量是5个逗号,
我正在尝试获得这样的输出,
ID RPT_NAME CSV_STRING
----------------------
abc123 Test1 AA,BB,AC,AD,EF,GG
abc123 Test1 GG,FG,FD,DF,GG,AA
abc123 Test1 PL,KI,LO,TT,TE,LF
abc123 Test1 FG
abc456 Test2 GF,DS,SA,RE,EW,QQ
abc456 Test2 QW
def123 Test3 HH
我尽力解释了。 :)
我能得到解决方案吗? TIA 赞赏
with tab(ID,RPT_NAME,CSV_STRING) as
(
select 'abc123','Test1','AA,BB,AC,AD,EF,GG,FG,FD,DF,GG,AA,PL,KI,LO,TT,TE,LF,FG' from DUAL
union all
select 'abc456','Test2','GF,DS,SA,RE,EW,QQ,QW' from DUAL
union all
select 'def123','Test3','HH' from DUAL
)
select id,rpt_name,
trim(trailing ',' from regexp_substr(csv_string,'([^,]+(,|$)){1,6}',1,level))
from tab
connect by regexp_substr(csv_string,'([^,]+(,|$)){1,6}',1,level) is not null
and prior id=id and prior dbms_random.value is not null
regexp_substr
用正则表达式 ([^,]+(,|$)){1,6}
得到一到六个元素。 connect by
复制行直到字符串完成。
我有这样的数据,
ID RPT_NAME CSV_STRING
------------------------------
abc123 Test1 AA,BB,AC,AD,EF,GG,FG,FD,DF,GG,AA,PL,KI,LO,TT,TE,LF,FG
abc456 Test2 GF,DS,SA,RE,EW,QQ,QW
def123 Test3 HH
我希望将逗号拆分限制为固定数量的逗号行。 Post 那,我将获取下一组记录,直到所有记录都以 6 组为一组推送到行中。
例如,我的偏移量是5个逗号, 我正在尝试获得这样的输出,
ID RPT_NAME CSV_STRING
----------------------
abc123 Test1 AA,BB,AC,AD,EF,GG
abc123 Test1 GG,FG,FD,DF,GG,AA
abc123 Test1 PL,KI,LO,TT,TE,LF
abc123 Test1 FG
abc456 Test2 GF,DS,SA,RE,EW,QQ
abc456 Test2 QW
def123 Test3 HH
我尽力解释了。 :)
我能得到解决方案吗? TIA 赞赏
with tab(ID,RPT_NAME,CSV_STRING) as
(
select 'abc123','Test1','AA,BB,AC,AD,EF,GG,FG,FD,DF,GG,AA,PL,KI,LO,TT,TE,LF,FG' from DUAL
union all
select 'abc456','Test2','GF,DS,SA,RE,EW,QQ,QW' from DUAL
union all
select 'def123','Test3','HH' from DUAL
)
select id,rpt_name,
trim(trailing ',' from regexp_substr(csv_string,'([^,]+(,|$)){1,6}',1,level))
from tab
connect by regexp_substr(csv_string,'([^,]+(,|$)){1,6}',1,level) is not null
and prior id=id and prior dbms_random.value is not null
regexp_substr
用正则表达式 ([^,]+(,|$)){1,6}
得到一到六个元素。 connect by
复制行直到字符串完成。