Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Memisahkan Rentetan Dipisahkan Koma kepada Berbilang Baris dalam Oracle?

Bagaimana untuk Memisahkan Rentetan Dipisahkan Koma kepada Berbilang Baris dalam Oracle?

Susan Sarandon
Lepaskan: 2025-01-22 17:51:12
asal
580 orang telah melayarinya

How to Split Comma-Separated Strings into Multiple Rows in Oracle?

Pisah rentetan dipisahkan koma kepada berbilang baris dalam Oracle

Dalam Oracle, anda boleh memisahkan rentetan yang dipisahkan koma kepada berbilang baris menggunakan gabungan ungkapan biasa dan pertanyaan hierarki. Berikut ialah panduan lengkap tentang cara mencapai matlamat ini:

Pernyataan Masalah:

Andaikan terdapat jadual dengan struktur berikut:

<code>名称 | 项目 | 错误
--------------
108  | test    | Err1, Err2, Err3
109  | test2   | Err1</code>
Salin selepas log masuk

Anda ingin menukar lajur "ralat" kepada berbilang baris, hasilnya adalah seperti berikut:

<code>名称 | 项目 | 错误
--------------
108  | test    | Err1
108  | test    | Err2
108  | test    | Err3
109  | test2   | Err1</code>
Salin selepas log masuk

Penyelesaian:

with temp as (
    select 108 Name, 'test' Project, 'Err1, Err2, Err3' Error  from dual
    union all
    select 109, 'test2', 'Err1' from dual
)
select distinct
  t.name, t.project,
  trim(regexp_substr(t.error, '[^,]+', 1, levels.column_value))  as error
from 
  temp t,
  table(cast(multiset(select level from dual connect by  level <= regexp_count(t.error, ',')) as OdciNumberList)) levels
;
Salin selepas log masuk

Arahan:

  1. Buat jadual sementara: Cipta jadual TEMP untuk menyimpan data sampel.
  2. Gunakan pertanyaan hierarki: Subkueri select level from dual connect by level <= regexp_count(t.error, ',') menjana urutan nombor yang panjangnya sama dengan bilangan koma dalam rentetan tambah satu (iaitu bilangan ralat).
  3. Hantar dan jadual: Fungsi table() dan cast() menukar pertanyaan hierarki kepada koleksi senarai angka dan kemudian menjadi jadual. Ini akan menghasilkan baris dengan bilangan yang semakin meningkat sepadan dengan setiap baris dalam jadual TEMP.
  4. Ekstrak nilai ralat: Fungsi regexp_substr() digunakan untuk mengekstrak nilai ralat tunggal berdasarkan nombor daripada langkah sebelumnya. Fungsi trim() mengalih keluar sebarang ruang kosong di hadapan atau di belakang.
  5. Sertai dan Pilih: Pertanyaan utama bergabung dengan jadual TEMP dengan jadual yang dibuat dalam langkah 4 dan memilih lajur yang sepadan: Nama, Projek dan Ralat.

Nota: Penyelesaian ini menggunakan jenis OdciNumberList dan mungkin memerlukan penetapan tetapan keserasian jika menggunakan versi Oracle lebih awal daripada 12c.

Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Rentetan Dipisahkan Koma kepada Berbilang Baris dalam Oracle?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan