Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menukar Nilai Dipisahkan Koma kepada Baris dalam Oracle?
Mengubah Data Dipisahkan Koma dalam Pangkalan Data Oracle
Banyak tugas manipulasi data memerlukan penukaran nilai dipisahkan koma (CSV) dalam satu lajur ke dalam baris individu untuk analisis yang lebih mudah. Oracle menawarkan beberapa pendekatan untuk mencapai ini.
Kaedah 1: SQL Rekursif dengan Ungkapan Biasa
Teknik ini menggunakan pertanyaan SQL rekursif digabungkan dengan ungkapan biasa untuk pemisahan CSV yang cekap:
<code class="language-sql">select distinct id, trim(regexp_substr(value,'[^,]+', 1, level) ) value, level from tbl1 connect by regexp_substr(value, '[^,]+', 1, level) is not null order by id, level;</code>
Pertanyaan ini secara berulang mengekstrak setiap nilai dipisahkan koma, menjana baris baharu untuk setiap satu dan termasuk penunjuk tahap.
Kaedah 2: Rekursif SQL (CTE) tanpa Ungkapan Biasa
Pendekatan SQL yang lebih standard menggunakan Ungkapan Jadual Biasa (CTE):
<code class="language-sql">with t (id,res,val,lev) as ( select id, trim(regexp_substr(value,'[^,]+', 1, 1 )) res, value as val, 1 as lev from tbl1 where regexp_substr(value, '[^,]+', 1, 1) is not null union all select id, trim(regexp_substr(val,'[^,]+', 1, lev+1) ) res, val, lev+1 as lev from t where regexp_substr(val, '[^,]+', 1, lev+1) is not null ) select id, res,lev from t order by id, lev;</code>
CTE rekursif ini mencapai hasil yang sama seperti kaedah sebelumnya tetapi mengelakkan pergantungan pada ungkapan biasa.
Kaedah 3: Pendekatan Bukan Rekursif (INSTR dan SUBSTR)
Alternatif bukan rekursif menggunakan INSTR()
dan SUBSTR()
berfungsi untuk mencari dan mengekstrak nilai:
<code class="language-sql">WITH t ( id, value, start_pos, end_pos ) AS ( SELECT id, value, 1, INSTR( value, ',' ) FROM tbl1 UNION ALL SELECT id, value, end_pos + 1, INSTR( value, ',', end_pos + 1 ) FROM t WHERE end_pos > 0 ) SELECT id, SUBSTR( value, start_pos, DECODE( end_pos, 0, LENGTH( value ) + 1, end_pos ) - start_pos ) AS value FROM t ORDER BY id, start_pos;</code>
Kaedah ini secara berulang mencari kedudukan koma dan mengekstrak subrentetan, menawarkan pendekatan berbeza kepada masalah.
Kaedah optimum bergantung pada data khusus anda dan keperluan prestasi. Pertimbangkan untuk menguji setiap pendekatan untuk menentukan penyelesaian yang paling cekap untuk persekitaran Oracle anda.
Atas ialah kandungan terperinci Bagaimana untuk Menukar Nilai Dipisahkan Koma kepada Baris dalam Oracle?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!