首页 > 解决方案 > Oracle PLSQL regexp_substr 用双引号分隔逗号分隔的字符串

问题描述

我已经看到了如何将逗号分隔的字符串分成如下行的示例:

select distinct id, trim(regexp_substr(value,'[^,]+', 1, level) ) value, level
  from tbl1
   connect by regexp_substr(value, '[^,]+', 1, level) is not null
   order by id, level;

但是,我的问题是,如何在双引号和逗号分隔的字符串上执行此操作?

例如:以上适用于“1,2,3,4,5,6,7”之类的字符串,但是“1”,“2”,“3”,“4,5”,“6,7”呢? 8","9" 使行最终如下所示:

1
2
3
4,5
6,7,8
9

编辑:我在 Oracle 11.2.0.4、11gR2 上。

标签: regexoracleplsql

解决方案


这是另一个解决方案。它必须使用具有编号的所有字符串。我使用数值索引作为基础。

with temp as  (
       select  '"1","2","3",x"4,5","6,73,8","9"' Colmn  from dual
     )
SELECT   regexp_substr(Colmn, '\d{1}', REGEXP_INSTR(Colmn, '\d{1}', REGEXP_INSTR(Colmn, '\d{1}') ,level),1 )   from temp
CONNECT BY REGEXP_COUNT (Colmn,'\d{1}')+1> level

推荐阅读