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
Lepaskan: 2025-01-22 18:52:11
asal
782 orang telah melayarinya

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:

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;
Salin selepas log masuk

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

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;
Salin selepas log masuk

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:

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;
Salin selepas log masuk

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 Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan