Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Mengasingkan Nilai Terhad Koma ke dalam Baris dalam Oracle?

Bagaimanakah Saya Boleh Mengasingkan Nilai Terhad Koma ke dalam Baris dalam Oracle?

DDD
Lepaskan: 2025-01-22 19:06:10
asal
633 orang telah melayarinya

How Can I Separate Comma-Delimited Values into Rows in Oracle?

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

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

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

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!

sumber:php.cn
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