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

Pisahkan String menjadi baris Oracle SQL

Ini akan berhasil:

SELECT DISTINCT ID, regexp_substr("Strings", '[^ ]+', 1, LEVEL)
FROM T
CONNECT BY regexp_substr("Strings", '[^ ]+', 1, LEVEL) IS NOT NULL
ORDER BY ID;

Perhatikan bagaimana saya menggunakan regexp_substr dalam klausa connect by juga. Ini untuk menangani kasus banyak spasi.

Jika Anda memiliki batas atas yang dapat diprediksi pada jumlah item per baris, mungkin ada baiknya membandingkan kinerja kueri rekursif di atas dengan CROSS JOIN sederhana :

WITH N as (SELECT LEVEL POS FROM DUAL CONNECT BY LEVEL < 10)
--                                                       ^^
--                                                 up to 10 substrings
SELECT ID, regexp_substr("Strings", '[^ ]+', 1, POS)
FROM T CROSS JOIN N
WHERE regexp_substr("Strings", '[^ ]+', 1, POS) IS NOT NULL
ORDER BY ID;

Lihat http://sqlfiddle.com/#!4/444e3/1 untuk demo langsung



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ubah tabel ubah kolom di database Oracle

  2. Perbedaan antara LockModeType Jpa

  3. ORA-01219:basis data tidak terbuka:kueri diizinkan hanya pada tabel/tampilan tetap

  4. Cara membuat menu di SQLPlus atau PL/SQL

  5. Memperbarui Salesforce dari Oracle®