Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Pisahkan teks kolom menjadi baris (ekstrak pembatas dalam tanda kurung) ORACLE SQL

Anda dapat menggunakan ekspresi reguler (([^(]*?(\(.*?\))?)*)(,|$) untuk mencocokkan:

  • [^(]*? Nol atau lebih (tetapi sesedikit mungkin) karakter tanda kurung buka
  • (\(.*?\))? Kemudian, secara opsional, tanda kurung buka dan sesedikit mungkin karakter hingga tanda kurung tutup.
  • ( )* Dibungkus dalam grup penangkap yang berulang kali nol atau lebih
  • ( ) Dibungkus dalam grup penangkap untuk dapat mereferensikan seluruh item yang cocok
  • (,|$) Diikuti dengan koma atau akhir string.

Seperti ini:

SQL Fiddle

Pengaturan Skema 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;

Kueri 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

Hasil :

| 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. Cara mendapatkan nilai dbms.output yang dikembalikan oleh blok PL-SQL di C#

  2. PDB Cabut Kesalahan ORA-17528

  3. Oracle:bagaimana situasinya menggunakan RAISE_APPLICATION_ERROR?

  4. Hubungkan Sys sebagai Sysdba :Hak istimewa tidak mencukupi

  5. Hilangkan hasil duplikat dalam kueri pemilihan yang berisi kolom CLOB