Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Memisahkan Nilai Dipisahkan Koma dalam Oracle kepada Berbilang Baris Tanpa Pendua?

Bagaimana untuk Memisahkan Nilai Dipisahkan Koma dalam Oracle kepada Berbilang Baris Tanpa Pendua?

Patricia Arquette
Lepaskan: 2024-12-30 12:32:10
asal
562 orang telah melayarinya

How to Split Comma-Separated Values in Oracle into Multiple Rows Without Duplicates?

Memisahkan Berbilang Nilai Dipisahkan Koma dalam Jadual Oracle kepada Berbilang Baris tanpa Pendua

Apabila berurusan dengan data dalam jadual Oracle, ia selalunya diperlukan untuk membahagikan nilai yang dipisahkan koma kepada berbilang baris. Menggunakan gabungan CONNECT BY dan ungkapan biasa, adalah mungkin untuk mencapai ini. Walau bagaimanapun, adalah penting untuk mengelakkan baris pendua dalam hasil pertanyaan.

Pertanyaan untuk Membahagikan Nilai Dipisahkan Koma

WITH CTE AS (
  SELECT 'a,b,c,d,e' temp, 1 slno FROM DUAL
  UNION
  SELECT 'f,g' temp, 2 slno FROM DUAL
  UNION
  SELECT 'h' temp, 3 slno FROM DUAL
)

SELECT TRIM(REGEXP_SUBSTR(temp, '[^,]+', 1, level)), slno
FROM CTE
CONNECT BY level <= REGEXP_COUNT(temp, '[^,]+')
AND PRIOR slno = slno
AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL
Salin selepas log masuk

Penjelasan

Pertanyaan ini menggunakan klausa WITH rekursif untuk mencipta Ungkapan Jadual Biasa (CTE) bernama CTE. CTE terdiri daripada tiga baris data dengan nilai dipisahkan koma.

Pernyataan SELECT utama kemudian mengekstrak nilai individu daripada lajur temp. Fungsi TRIM digunakan untuk mengalih keluar sebarang ruang kosong di hadapan atau di belakang daripada nilai. Fungsi REGEXP_SUBSTR() bertanggungjawab untuk membelah lajur temp kepada nilai berasingan berdasarkan pembatas koma.

Klausa CONNECT BY melakukan pemisahan rekursif. Ia memastikan bahawa setiap nilai yang dipisahkan koma diberikan tahap yang unik. Keadaan PRIOR slno = slno memastikan tahap dinaikkan hanya dalam setiap baris (slno).

Selain itu, keadaan PRIOR DBMS_RANDOM.VALUE IS NOT NULL digunakan untuk mengelakkan baris pendua daripada dijana. DBMS_RANDOM.VALUE ialah pseudocolumn yang mengembalikan nombor rawak. Dengan membandingkannya dengan IS NOT NULL, kami memperkenalkan elemen rawak yang menghapuskan pendua.

Hasil akhir ialah jadual dengan berbilang baris, setiap satu mengandungi nilai tunggal daripada rentetan asal yang dipisahkan koma. Pendekatan ini membahagikan nilai dengan berkesan tanpa menghasilkan sebarang baris pendua.

Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Nilai Dipisahkan Koma dalam Oracle kepada Berbilang Baris Tanpa Pendua?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan