Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Podziel tekst kolumny na wiersze (wyodrębnij separator w nawiasie) ORACLE SQL

Możesz użyć wyrażenia regularnego (([^(]*?(\(.*?\))?)*)(,|$) dopasować:

  • [^(]*? Zero lub więcej (ale jak najmniej) znaków nie otwierających nawiasów
  • (\(.*?\))? Następnie, opcjonalnie, nawias otwierający i jak najmniej znaków, aż do nawiasu zamykającego.
  • ( )* Zapakowany w grupę przechwytywania powtórzoną zero lub więcej razy
  • ( ) Umieszczony w grupie przechwytywania, aby móc odnieść się do całego dopasowanego elementu
  • (,|$) Po którym następuje przecinek lub koniec ciągu.

Tak:

Skrzypce SQL

Konfiguracja schematu Oracle 11g R2 :

CREATE TABLE table_name ( ID, Kategory ) AS
SELECT 1, 'ATD 5(2830),ATO 4(510),EDI 1,EH A1,SCI 2,SS 1,STO-SE 1(oral, CNS, blood),STO-SE 2(oral, respiratory effects)' FROM DUAL;

Zapytanie 1 :

SELECT ID,
       l.COLUMN_VALUE AS item,
       REGEXP_SUBSTR(
         Kategory,
         '(([^(]*?(\(.*?\))?)*)(,|$)',
         1,
         l.COLUMN_VALUE,
         NULL,
         1
       ) AS value
FROM   table_name t
       CROSS JOIN
       TABLE(
         CAST(
           MULTISET(
             SELECT LEVEL
             FROM   DUAL
             CONNECT BY LEVEL < REGEXP_COUNT( t.Kategory, '(([^(]*?(\(.*?\))?)*)(,|$)' )
           )
           AS SYS.ODCINUMBERLIST
         )
       ) l

Wyniki :

| ID | ITEM |                               VALUE |
|----|------|-------------------------------------|
|  1 |    1 |                         ATD 5(2830) |
|  1 |    2 |                          ATO 4(510) |
|  1 |    3 |                               EDI 1 |
|  1 |    4 |                               EH A1 |
|  1 |    5 |                               SCI 2 |
|  1 |    6 |                                SS 1 |
|  1 |    7 |          STO-SE 1(oral, CNS, blood) |
|  1 |    8 | STO-SE 2(oral, respiratory effects) |



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wsparcie dla JSON w Oracle 11g

  2. Jak wykonać procedurę wewnątrz pakietu w Oracle

  3. Obsługa wartości null podczas korzystania z Oracle XMLType

  4. Jak rozwiązać ORA-29471 na dbms_sql.open_cursor?

  5. java.sql.SQLException:błąd we/wy:reset połączenia na serwerze linux