Memisahkan Nilai Dipisahkan Koma dalam SQLite: Pendekatan Common Table Expression (CTE)
Dalam bidang pengurusan data, keperluan untuk nilai yang dipisahkan koma (CSV) sering timbul. Untuk SQLite, sistem pangkalan data ringan yang popular, tugas ini mungkin tidak semudah dalam persekitaran SQL yang lain kerana ketiadaan fungsi substring() khusus. Walau bagaimanapun, terdapat penyelesaian alternatif yang memanfaatkan Ungkapan Jadual Biasa (CTE).
Mari kita pertimbangkan senario berikut: kami mempunyai jadual dengan lajur "Kategori" yang mengandungi rentetan dipisahkan koma dan kami ingin mengekstrak nilai individu daripada setiap rentetan ke dalam baris yang berasingan.
CTE ialah set hasil sementara yang dinamakan yang boleh dirujuk dan dimanipulasi dalam satu pertanyaan. Dalam kes kami, kami boleh menggunakan CTE untuk membelah rekursif rentetan CSV dan menyimpan nilai yang diekstrak dalam jadual baharu. Berikut ialah pertanyaannya:
WITH split(word, csv) AS ( -- 'initial query' SELECT '', 'Auto,A,1234444'||',' -- terminate with ',' indicating csv ending -- 'recursive query' UNION ALL SELECT substr(csv, 0, instr(csv, ',')), -- each word contains text up to next ',' substr(csv, instr(csv, ',') + 1) -- next recursion parses csv after this ',' FROM split -- recurse WHERE csv != '' -- break recursion once no more csv words exist ) SELECT word FROM split WHERE word!=''; -- filter out 1st/last rows
Pertanyaan ini memisahkan rentetan CSV menggunakan fungsi instr() untuk mencari koma pertama, mengekstrak subrentetan sebelum koma dan secara rekursif memanggil dirinya untuk mengulangi proses pada bahagian yang tinggal daripada rentetan. Rekursi ditamatkan apabila tiada lagi koma yang tinggal.
Output yang terhasil mengandungi nilai individu yang diekstrak daripada rentetan CSV asal, disusun ke dalam baris:
Auto A 1234444
Pendekatan ini memberikan yang berkuasa dan cara yang fleksibel untuk memisahkan nilai yang dipisahkan koma dalam SQLite, menjadikannya alat yang berharga untuk tugas manipulasi data.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membahagikan Nilai Dipisahkan Koma dalam SQLite Menggunakan Ungkapan Jadual Biasa (CTE)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!