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

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

DDD
DDDasal
2025-01-22 17:47:09151semak imbas

How to Split a Comma-Delimited String into Multiple Rows in Oracle?

Pisah rentetan yang dipisahkan koma kepada berbilang baris dalam Oracle

Memisahkan rentetan dipisahkan koma kepada berbilang baris ialah tugas prapemprosesan dan analisis data biasa dalam Pangkalan Data Oracle. Walaupun terdapat banyak cara untuk mencapai ini, kita akan melihat satu kaedah yang mudah dan berkesan.

Salah satu cara ialah memanfaatkan ungkapan biasa Oracle dan menyambung mengikut fungsi. Pertimbangkan jadual berikut, di mana setiap rekod mengandungi ralat dipisahkan koma:

名称 项目 错误
108 test Err1, Err2, Err3
109 test2 Err1

Matlamat kami adalah untuk mengekstrak setiap ralat ke dalam baris yang berasingan, menghasilkan perkara berikut:

名称 项目 错误
108 test Err1
108 test Err2
108 test Err3
109 test2 Err1

Untuk melakukan ini, kami menggunakan pertanyaan hierarki dan regexp_substr untuk mengekstrak setiap ralat berdasarkan bilangan kejadian ralat. Pertanyaan berikut menunjukkan pendekatan ini:

<code class="language-sql">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 <= length(regexp_replace(t.error, '[^,]+')) + 1) as sys.OdciNumberList)) levels
order by name</code>

Pertanyaan ini menggunakan koma untuk menggantikan panjang rentetan (regexp_replace) dan mekanisme pertanyaan hierarki untuk mencipta satu siri peringkat yang berbeza. Setiap tahap mewakili bilangan kejadian ralat dalam rentetan yang dipisahkan koma. Fungsi regexp_substr kemudian mengekstrak ralat berdasarkan kiraan kejadiannya dan set hasil akhir mengandungi output yang dikehendaki.

Kaedah ini menyediakan cara yang mudah dan cekap untuk memisahkan rentetan yang dipisahkan koma kepada berbilang baris dalam Oracle 10g dan lebih baru. Ia memanfaatkan keupayaan manipulasi rentetan yang berkuasa dan keupayaan pertanyaan hierarki Oracle untuk mencapai transformasi data yang diperlukan.

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

Kenyataan:
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