Rumah >pangkalan data >SQL >Kajian kes SQL: menggabungkan dan membelah rentetan
Artikel ini membawa anda pengetahuan yang berkaitan tentang pelayan SQL terutamanya memperkenalkan anda kepada maklumat yang berkaitan tentang penggabungan dan pemisahan rentetan dalam kajian kes SQL nilai rujukan tertentu untuk semua orang belajar atau menggunakan Oracle Rakan yang memerlukan boleh merujuk kepadanya.
Kajian yang disyorkan: "Tutorial SQL"
Hasil pelaksanaan:
--方法一 SELECT d.dept_name,wm_concat(e.emp_name) FROM employee e INNER JOIN department d ON d.dept_id=e.dept_id GROUP BY d.dept_name;
Analisis SQL:
Gunakan fungsi wm_concat() Oracle untuk menggabungkan rentetan Terdapat kelemahan di sini Simbol sambungan yang digabungkan hanya boleh menjadi koma lalai, dan simbol lain tidak boleh digunakan.
Kaedah penggabungan rentetan dua:
Laksanakan SQL:Hasil pelaksanaan:
--方法二 SELECT d.dept_name, LISTAGG (e.emp_name, ',') WITHIN GROUP (ORDER BY e.emp_name) names FROM employee e INNER JOIN department d ON d.dept_id=e.dept_id GROUP BY d.dept_name;
Analisis SQL:
Gunakan fungsi LISTAGG() Oracle sendiri untuk menggabungkan rentetan ialah simbol sambungan yang digabungkan boleh ditentukan ialah sebarang aksara, dan ORDER BY sorting boleh dilaksanakan dengan mudah.
Pembahagian rentetan
Mungkin terdapat pelbagai kaedah pelaksanaan dalam Oracle, yang saya tahu setakat ini Terdapat dua jenis. Pelaksanaan kedua-dua jenis ini direkodkan di bawah:
Kaedah pemisahan rentetan satu: Melaksanakan SQL:Keputusan pelaksanaan:
--方法一 WITH t (id, name, sub, str) AS ( SELECT id, name, substr(class, 1, instr(class, '、')-1), substr(concat(class,'、'), instr(class, '、')+1) FROM movies UNION ALL SELECT id, name,substr(str, 1, instr(str, '、')-1), substr(str, instr(str, '、')+1) FROM t WHERE instr(str, '、')>0 ) SELECT id, name, sub FROM t ORDER BY id;
Analisis SQL:
Pernyataan ini adalah sedikit rumit -Penjelasan langkah. :
Pertama lihat data asal jadual filem:
1 medan mengikut pemisah (di sini ialah No. jeda) pada mulanya dibahagikan kepada dua bahagian. Bahagian pertama ialah nilai pertama medan kelas yang akan dipecahkan, dan bahagian kedua ialah nilai bahagian baki kelas yang akan dipecahkan. 2. Langkah kedua menggunakan ungkapan WITH untuk melaksanakan pertanyaan rekursif dan menggelungkan nilai yang tidak dipisahkan dalam langkah pertama mengikut pembatas (di sini ialah koma) ( Bahagian 2) Pisahkan sehingga pembatas terakhir medan, dan data pada penghujung rekursi diletakkan dalam jadual sementara t. 3. Langkah ketiga ialah pertanyaan mudah untuk membuat pertanyaan dan mengisih rekod daripada jadual t sementara dalam langkah kedua. Kaedah pemisahan rentetan dua:Laksanakan SQL:
Laksanakan Keputusan:
--方法二 SELECT m.name,t.column_value FROM movies m,TABLE(SPLIT(m.class,'、')) t;
Analisis SQL:
Kaedah ini sebenarnya diproses dengan menyesuaikan fungsi untuk rentetan fungsi split sebenarnya serupa dengan logik kaedah 1. Kedua-duanya menggunakan rekursi untuk membahagikan nilai dalam rentetan satu demi satu mengikut pembatas, dan akhirnya mengembalikan rentetan split. Secara peribadi, saya rasa kaedah ini lebih baik kerana ia merangkumi logik pemisahan, menjadikannya lebih mudah digunakan dan lebih jelas dalam logik.
Berikut ialah skrip penciptaan fungsi split:
Jenis nilai pulangan fungsi, tabletype, juga merupakan jenis tersuai. Berikut ialah skrip penciptaan jenis ini:create or replace function split (p_list clob, p_sep varchar2 := ',') return tabletype pipelined is l_idx pls_integer; v_list varchar2 (32676) := to_char(p_list); begin loop l_idx := instr (v_list, p_sep); if l_idx > 0 then pipe row (substr (v_list, 1, l_idx - 1)); v_list := substr (v_list, l_idx + length (p_sep)); else pipe row (v_list); exit; end if; end loop; end;Pembelajaran yang disyorkan: "
Tutorial SQL
"Atas ialah kandungan terperinci Kajian kes SQL: menggabungkan dan membelah rentetan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!