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!