Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menukar Nilai Dipisahkan Koma kepada Baris dalam Oracle?

Bagaimana untuk Menukar Nilai Dipisahkan Koma kepada Baris dalam Oracle?

Susan Sarandon
Susan Sarandonasal
2025-01-22 18:52:11775semak imbas

How to Convert Comma-Separated Values to Rows in 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!

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