Rumah >pangkalan data >tutorial mysql >Bagaimana Mengeluarkan Nilai Nth dengan Aman daripada Senarai Dipisahkan Koma dalam SQL, Mengendalikan Nulls?

Bagaimana Mengeluarkan Nilai Nth dengan Aman daripada Senarai Dipisahkan Koma dalam SQL, Mengendalikan Nulls?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-03 16:44:41874semak imbas

How to Reliably Extract the Nth Value from a Comma-Separated List in SQL, Handling Nulls?

Penyelesaian Regex untuk Memilih Nilai Khusus daripada Senarai Dipisahkan Koma dengan Nulls

Apabila mengekstrak nilai ke-n daripada senarai dipisahkan koma menggunakan REGEXP_SUBSTR (), mengendalikan nilai nol boleh menjadi rumit. Berikut ialah pemeriksaan terperinci masalah dan penyelesaian yang komprehensif.

Mula-mula, pertimbangkan senario berikut:

SQL> select REGEXP_SUBSTR('1,2,3,4,5,6', '[^,]+', 1, 2) data
from dual;

D
-
2

Pertanyaan ini berjaya mendapatkan semula nilai bukan nol kedua ("2") daripada senarai menggunakan ungkapan biasa [^,] . Walau bagaimanapun, apabila nilai kedua adalah nol, pertanyaan mengembalikan item ketiga:

SQL> select REGEXP_SUBSTR('1,,3,4,5,6', '[^,]+', 1, 2) data
from dual;

D
-
3

Untuk menangani isu ini, regex yang lebih fleksibel diperlukan untuk membenarkan aksara pilihan:

SQL> select REGEXP_SUBSTR('1,,3,4,5,6', '[^,]*', 1, 4) data
from dual;

D
-
3

Walau bagaimanapun, regex ini juga gagal untuk nombor yang melepasi nol.

Akhirnya, penyelesaiannya terletak pada yang lebih canggih regex:

REGEX_SUBSTR('1,,3,4,5', '(.*?)(,|$)', 1, 2, NULL, 1)

regex ini menangkap data sebelum kejadian ke-n koma atau penghujung baris. Hasilnya ialah:

Data
----

Untuk merangkum penyelesaian ini ke dalam fungsi boleh guna semula, pertimbangkan kod berikut:

FUNCTION GET_LIST_ELEMENT(string_in VARCHAR2, element_in NUMBER, delimiter_in VARCHAR2 DEFAULT ',') RETURN VARCHAR2 IS
BEGIN
  RETURN REGEXP_SUBSTR(string_in, '(.*?)(\'||delimiter_in||'|$)', 1, element_in, NULL, 1);
END GET_LIST_ELEMENT;

Fungsi ini boleh dipanggil seperti ini:

select get_list_element('123,222,,432,555', 4) from dual;

Tidak kira potensi batal atau elemen khusus yang dipilih, penyelesaian ini menyediakan kaedah yang mantap dan elegan untuk mengekstrak nilai daripada dipisahkan koma senarai dalam Oracle SQL.

Atas ialah kandungan terperinci Bagaimana Mengeluarkan Nilai Nth dengan Aman daripada Senarai Dipisahkan Koma dalam SQL, Mengendalikan Nulls?. 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