Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memisahkan dan Menapis Lajur VARCHAR yang Dipisahkan Koma dengan Cekap dalam SQL?

Bagaimana untuk Memisahkan dan Menapis Lajur VARCHAR yang Dipisahkan Koma dengan Cekap dalam SQL?

DDD
DDDasal
2024-12-24 17:48:12183semak imbas

How to Efficiently Split and Filter a Comma-Separated VARCHAR Column in SQL?

Memisahkan Lajur VARCHAR kepada Berbilang Nilai dalam SQL

Jenis data VARCHAR dalam SQL membenarkan penyimpanan data aksara panjang berubah-ubah. Selalunya, lajur VARCHAR perlu dipecahkan kepada berbilang nilai untuk memudahkan penapisan data atau operasi lain.

Pertimbangkan contoh berikut:

SELECT 
  AD_Ref_List.Value
FROM AD_Ref_List
WHERE AD_Ref_List.AD_Reference_ID= 1000448

Pertanyaan ini mendapatkan semula lajur bernama "Nilai" daripada jadual "AD_Ref_List" di mana lajur "AD_Reference_ID" adalah sama dengan 1000448. Hasilnya ialah senarai nilai:

CO,VO

Walau bagaimanapun, keperluan adalah untuk mengehadkan keputusan berdasarkan nilai yang disimpan dalam jadual lain, "xx_insert":

SELECT xx_insert.XX_DocAction_Next
  FROM xx_insert
  WHERE xx_insert_id = 1000283

Hasil pertanyaan ini ialah :

CO

Cabarannya terletak pada mengubah suai pertanyaan asal untuk memasukkan nilai daripada "xx_insert" manakala mengekalkan format yang dipisahkan koma. Percubaan awal mengubah nilai menjadi rentetan terhad:

AD_Ref_List.Value IN ('CO,VO')

Yang bukan hasil yang diingini.

Penyelesaian:

Untuk menangani perkara ini isu, nilai dalam klausa IN hendaklah dibalut dengan pembatas yang sesuai dan disemak dengan senarai yang dipisahkan koma yang turut disertakan dengan pembatas:

SELECT r.Value
FROM   AD_Ref_List r
       INNER JOIN xx_insert x
       ON ( ',' || x.XX_DocAction_Next || ',' LIKE '%,' || r.value || ',%' )
WHERE  r.AD_Reference_ID = 1000448
AND    x.xx_insert_id    = 1000283;

Teknik ini membolehkan pengecaman nilai yang sepadan dengan senarai yang dipisahkan koma. Sebagai alternatif, pendekatan yang lebih cekap menggunakan penapisan nilai baris juga boleh digunakan:

SELECT Value
FROM   AD_Ref_List
WHERE  AD_Reference_ID = 1000448
AND    value IN (
  SELECT REGEXP_SUBSTR( XX_DocAction_Next, '[^,]+', 1, LEVEL )
  FROM   xx_insert
  WHERE  xx_insert_id    = 1000283
  CONNECT BY LEVEL <= REGEXP_COUNT( XX_DocAction_Next, '[^,]+' )
);

Kedua-dua penyelesaian berkesan memisahkan lajur VARCHAR kepada berbilang nilai dan penapis berdasarkan nilai yang ditentukan, menyelesaikan isu yang dihadapi pada permulaan pertanyaan.

Atas ialah kandungan terperinci Bagaimana untuk Memisahkan dan Menapis Lajur VARCHAR yang Dipisahkan Koma dengan Cekap dalam SQL?. 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