Split string in Oracle with regexp_substr in order

前端 未结 2 1190
梦谈多话
梦谈多话 2021-01-24 03:29

I have a string in Oracle database, my string is: \'bbb;aaa;qqq;ccc\'

I used regexp for split my string:

select distinct trim(regexp_substr(\'bbb;aaa;qqq         


        
2条回答
  •  遇见更好的自我
    2021-01-24 04:10

    If you do need DISTINCT:

    WITH your_data( value ) AS (
      SELECT 'bbb;aaa;qqq;ccc;aaa;eee' FROM DUAL
    ),
    positions ( string, lvl, start_pos, end_pos ) AS (
      SELECT value, 1, 1, INSTR( value, ';', 1, 1 ) FROM your_data
    UNION ALL
      SELECT string, lvl + 1, end_pos + 1, INSTR( string, ';', 1, lvl + 1 )
      FROM positions
      WHERE  end_pos > 0
    ),
    substrings ( string, substring, lvl, start_pos ) AS (
      SELECT string,
             DECODE( end_pos, 0, SUBSTR( string, start_pos ), SUBSTR( string, start_pos, end_pos - start_pos ) ),
             lvl,
             start_pos
      FROM   positions
    )
    SELECT string,
           substring,
           lvl
    FROM   substrings
    WHERE  INSTR( ';' || string || ';', ';' || substring || ';' ) = start_pos;
    

    Output:

    STRING                  SUBSTRING                      LVL
    ----------------------- ----------------------- ----------
    bbb;aaa;qqq;ccc;aaa;eee bbb                              1
    bbb;aaa;qqq;ccc;aaa;eee aaa                              2
    bbb;aaa;qqq;ccc;aaa;eee qqq                              3
    bbb;aaa;qqq;ccc;aaa;eee ccc                              4
    bbb;aaa;qqq;ccc;aaa;eee eee                              6
    

提交回复
热议问题