Pengenalan
Mengekstrak nilai individu daripada dipisahkan koma rentetan adalah keperluan biasa dalam analisis data. Dalam SQLite, tiada persamaan langsung dengan fungsi SubString() SQL, menjadikan tugas ini agak mencabar. Walau bagaimanapun, dengan bantuan Ungkapan Jadual Biasa (CTE), kami boleh mencipta penyelesaian yang cekap dan intuitif.
Penyelesaian: Menggunakan CTE
CTE membolehkan kami untuk mentakrif dan menamakan set hasil sementara. Dengan memanfaatkan rekursi dalam CTE, kami boleh menghuraikan rentetan yang dipisahkan koma secara berulang, mengekstrak setiap nilai satu demi satu.
Pengisytiharan CTE dalam kes kami kelihatan seperti ini:
WITH split(word, csv) AS ( -- 'initial query' (see SQLite docs linked above) SELECT '', 'Auto,A,1234444'||',' -- 'recursive query' UNION ALL SELECT substr(csv, 0, instr(csv, ',')), substr(csv, instr(csv, ',') + 1) FROM split WHERE csv != '' )
Dalam 'pertanyaan awal,' kami mencipta titik permulaan untuk bahagian rekursif CTE. Kami menentukan rentetan kosong untuk 'perkataan' dan menambahkan rentetan yang dipisahkan koma dengan koma tambahan untuk menunjukkan penghujung CSV.
'Pertanyaan rekursif' ialah tempat keajaiban berlaku. Ia menggunakan fungsi instr() untuk mencari kedudukan koma pertama dalam medan 'csv'. Kemudian, ia membahagikan medan 'csv' menggunakan substr() kepada 'word' dan bahagian 'csv' yang tinggal.
Rekursi digunakan untuk terus membelah bahagian 'csv' yang tinggal sehingga tiada lagi koma yang tinggal , dengan berkesan mengekstrak semua nilai yang dipisahkan koma.
Mengambil semula Split Nilai
Setelah CTE mentakrifkan nilai pecahan, kita boleh mendapatkannya menggunakan pertanyaan mudah:
SELECT word FROM split WHERE word!='';
Klausa WHERE menapis rentetan kosong yang mewakili permulaan dan nilai terminal.
Output dan Faedah
Output pertanyaan adalah seperti berikut:
Auto A 1234444
Pendekatan ini memberikan beberapa faedah:
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membahagikan Nilai Dipisahkan Koma dengan Mudah dalam SQLite Menggunakan Ungkapan Jadual Biasa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!