Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie kann ich Regex verwenden, um eine Zeichenfolge aufzuteilen, wobei eine Zeichenfolge als Trennzeichen verwendet wird?

Probieren Sie diese Methoden aus.

Dies erhält das erste Element, nach dem Sie ursprünglich gefragt haben:

SQL> with tbl(str) as (
      select 'Hello My Delimiter World' from dual
    )
    SELECT REGEXP_SUBSTR( str ,'(.*?)( My Delimiter |$)', 1, 1, NULL, 1 ) AS element
    FROM   tbl;

ELEME
-----
Hello

Diese Version analysiert die gesamte Zeichenfolge. NULL-Elemente hinzugefügt, um zu zeigen, dass es mit fehlenden Elementen funktioniert:

SQL> with tbl(str) as (
      select ' My Delimiter Hello My Delimiter World My Delimiter  My Delimiter test My Delimiter ' from dual
    )
    SELECT LEVEL AS element,
    REGEXP_SUBSTR( str ,'(.*?)( My Delimiter |$)', 1, LEVEL, NULL, 1 ) AS element_value
    FROM   tbl
    CONNECT BY LEVEL <= regexp_count(str, ' My Delimiter ')+1;

   ELEMENT ELEMENT_VALUE
---------- --------------------
         1
         2 Hello
         3 World
         4
         5 test
         6

6 rows selected.