Mengubah Data Dibatasi Koma dalam Pangkalan Data Oracle
Pangkalan data Oracle kerap menyimpan data sebagai nilai dipisahkan koma dalam satu lajur, menghalang manipulasi dan pengambilan data yang cekap. Artikel ini membentangkan beberapa kaedah untuk menukar data yang dipisahkan koma ini dengan berkesan kepada baris individu, memperbaik analisis dan pemprosesan data.
Kaedah 1: Pertanyaan Rekursif dengan Ungkapan Biasa
Penyelesaian elegan ini menggunakan pertanyaan rekursif dan ungkapan biasa untuk pengekstrakan nilai 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>
Klausa CONNECT BY
berulang melalui nilai yang dipisahkan koma, manakala REGEXP_SUBSTR
mengekstrak setiap subrentetan.
Kaedah 2: Pendekatan Mematuhi ANSI dengan CTE
Untuk kemudahalihan yang dipertingkatkan, Common Table Expression (CTE) menawarkan alternatif yang mematuhi ANSI:
<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.
Kaedah 3: Pendekatan Rekursif tanpa Ungkapan Biasa
Pilihan ketiga mengelakkan ungkapan biasa, bergantung semata-mata pada manipulasi rentetan:
<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 memanfaatkan fungsi INSTR
untuk mencari kedudukan koma dan SUBSTR
untuk mengekstrak nilai.
Teknik ini menawarkan penyelesaian yang cekap dan boleh dipercayai untuk mengubah nilai yang dipisahkan koma kepada baris dalam pangkalan data Oracle, memudahkan pengendalian dan analisis data yang lebih baik.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengasingkan Nilai Terhad Koma ke dalam Baris dalam Oracle?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!