Memisahkan Lajur VARCHAR kepada Berbilang Nilai dalam SQL
Masalah:
Apabila mendapatkan semula nilai daripada lajur VARCHAR menggunakan klausa IN, Oracle menukar senarai yang dibataskan kepada a rentetan petikan tunggal, menghalang sub-pertanyaan daripada sepadan dengan nilai individu.
Penyelesaian 1:
Balutkan nilai senarai yang dibataskan dalam klausa IN dengan pembatas yang sama digunakan dalam lajur VARCHAR. Contohnya, daripada menggunakan AD_Ref_List.Value IN ('CO','VO'), gunakan AD_Ref_List.Value IN (',' || 'CO' || ',' || 'VO' || ',') .
Penyelesaian 2 (Alternatif Di Mana Klausa):
Gunakan teknik berasaskan ungkapan biasa dengan REGEXP_SUBSTR berfungsi untuk mengekstrak nilai individu daripada senarai yang dibataskan pada tahap tertentu. Sebagai contoh, pertanyaan berikut menggunakan rekursi untuk memisahkan senarai yang dibataskan:
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, '[^,]+') );
Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Lajur VARCHAR Terhad untuk Pertanyaan SQL yang Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!