Oracle SQL-如何将逗号拆分限制为行

Oracle SQL-如何将逗号拆分限制为行,sql,oracle,csv,rows,comma,Sql,Oracle,Csv,Rows,Comma,我有这样的数据 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 ID RPT_NAME CSV_STRING ---------------------- abc12

我有这样的数据

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
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
我希望将逗号拆分限制为固定逗号数的行。在此之后,我将获取下一组记录,直到所有记录都以6个一组的方式按行推送

例如,我的偏移量是5个逗号, 我试图得到这样的输出

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
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
我尽力解释它。:)

能给我一个解决办法吗?蒂亚表示赞赏

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
使用正则表达式
([^,]+(,|$){1,6}
获取一到六个元素<代码>连接方式复制行,直到字符串完成


使用正则表达式
([^,]+(,|$){1,6}
获取一到六个元素<代码>按连接复制行,直到字符串完成。

您使用的是哪一版本的Oracle?您使用的是哪一版本的Oracle?您是最好的!:)工作得很好。这个答案是我的问题。把这当作我的另一个评论,在我的结尾,有一件事是失败的,我有一个要求,在这个上面加上另一个选择,用同样的逻辑,但是对于另一个列,在它失败的地方,Clob被用在Oracle不允许的组中。有什么建议吗?@AniruddhaK clob large?可能在QueryB的varchar(
dbms\u lob.substr()
)中转换,但长度太大,超过4000,其中Varchar2fails@AniruddhaK有必要加工零件并结合结果。或者创建一个突出显示标记的存储函数(您是最好的!)工作得很好。这个答案是我的问题。把这当作我的另一个评论,在我的结尾,有一件事是失败的,我有一个要求,在这个上面加上另一个选择,用同样的逻辑,但是对于另一个列,在它失败的地方,Clob被用在Oracle不允许的组中。有什么建议吗?@AniruddhaK clob large?可能在QueryB的varchar(
dbms\u lob.substr()
)中转换,但长度太大,超过4000,其中Varchar2fails@AniruddhaK有必要加工零件并结合结果。或者创建一个突出显示标记的存储函数