【问题标题】:Oracle PLSQL regexp_substr separate comma separated string with double quotesOracle PLSQL regexp_substr 用双引号分隔逗号分隔的字符串
【发布时间】:2020-08-30 01:59:51
【问题描述】:

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

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。

【问题讨论】:

    标签: regex oracle plsql


    【解决方案1】:

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

    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
    

    【讨论】:

      【解决方案2】:

      有一个黑客。用#替换模式“,”并在正则表达式中使用它。它就像一个魅力。

      输入字符串:"1","2","3","4,5","6,7,8","9","Ant,B","Gradle","E,F","G"(可以是数字/字符无所谓)

       with temp as  (
             select  replace(replace('"1","2","3","4,5","6,7,8","9","Ant,B","Gradle","E,F","G"','","','#'),'"') Colmn  from dual
           )
      SELECT  trim(regexp_substr(str, '[^#]+', 1, level)) str
        FROM (SELECT Colmn str FROM temp) t
      CONNECT BY instr(str, '#', 1, level - 1) > 0
      

      输出:

          STR
      1
      2
      3
      4,5
      6,7,8
      9
      Ant,B
      Gradle
      E,F
      G
      10 rows
      

      请参考 DBFiddle 链接进行演示。

      https://dbfiddle.uk/?rdbms=oracle_18&fiddle=d09c326f614d10f5d3c407fdfd3a44c5

      【讨论】:

      • 感谢您的意见,但这些数字只是一个示例。不幸的是,真实数据不是数字。
      • 我试过了,它只是返回空格,它没有分隔列表。
      • 参考 Dbfiddle 链接进行演示,我已经用链接更新了答案。不确定为什么它不适合你。您能否分享您用于测试和更新问题的确切数据。
      • 我错过了将 '","' 替换为 #,成功了,谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-03
      相关资源
      最近更新 更多