Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Membahagikan Nilai Dipisahkan Koma dengan Cekap kepada Lajur dalam Oracle?

Bagaimana untuk Membahagikan Nilai Dipisahkan Koma dengan Cekap kepada Lajur dalam Oracle?

Patricia Arquette
Patricia Arquetteasal
2025-01-22 09:36:09659semak imbas

How to Efficiently Split Comma-Separated Values into Columns in Oracle?

Oracle: Menghuraikan Nilai Dipisahkan Koma dengan Cekap ke dalam Lajur

Pemprosesan data selalunya memerlukan pemisahan nilai dipisahkan koma (CSV) kepada lajur individu. Oracle menawarkan penyelesaian yang cekap menggunakan ungkapan biasa, terutamanya berfaedah apabila berurusan dengan sejumlah besar nilai (sehingga 255 dalam kes ini). Ini mengelakkan pengulangan fungsi SUBSTR() yang menyusahkan untuk setiap lajur.

Cabaran: Mengekstrak sehingga 255 nilai dipisahkan koma ke dalam lajur yang berbeza.

Penyelesaian: Memanfaatkan REGEXP_SUBSTR()

Kuncinya ialah fungsi REGEXP_SUBSTR() dan ungkapan biasa berikut:

<code class="language-sql">REGEXP_SUBSTR(CSV_VALUES, '(.*?)(,|$)', 1, COLUMN_NUMBER, NULL, 1)</code>

Memahami Regex:

  • (.*?): Memadankan mana-mana aksara (.) sifar atau lebih kali (*), tidak tamak (?). Ini memastikan ia menangkap hanya sehingga koma seterusnya.
  • (,|$): Memadankan sama ada koma (,) atau hujung rentetan ($). Ini mengehadkan nilai.
  • 1: Menentukan bahawa kumpulan pertama yang ditangkap (nilai itu sendiri, tidak termasuk koma) harus dikembalikan.
  • COLUMN_NUMBER: Menunjukkan nilai (lajur) yang hendak diekstrak (1 untuk yang pertama, 2 untuk yang kedua dan seterusnya).
  • NULL, 1: Parameter ini digunakan untuk padanan tidak sensitif huruf besar dan memilih kejadian pertama.

Contoh Ilustrasi:

Pertimbangkan rentetan CSV ini:

<code>CSV_VALUES: 1.25, 3.87, 2, 5, 4, 3.3</code>

Untuk mendapatkan nilai pertama (1.25):

<code class="language-sql">REGEXP_SUBSTR(CSV_VALUES, '(.*?)(,|$)', 1, 1, NULL, 1)</code>

Untuk nilai kedua (3.87):

<code class="language-sql">REGEXP_SUBSTR(CSV_VALUES, '(.*?)(,|$)', 1, 2, NULL, 1)</code>

Dengan melelaran melalui COLUMN_NUMBER, semua nilai diekstrak ke dalam lajur individu. Kaedah ini menskala dengan cekap tanpa mengira bilangan nilai dipisahkan koma dalam rentetan.

Atas ialah kandungan terperinci Bagaimana untuk Membahagikan Nilai Dipisahkan Koma dengan Cekap kepada Lajur 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