Memisahkan String mengikut Kedudukan Pembatas menggunakan Oracle SQL
Tugas biasa apabila bekerja dengan rentetan adalah untuk membahagikannya kepada segmen yang lebih kecil berdasarkan pembatas tertentu. Walau bagaimanapun, apabila kedudukan pembatas berbeza dalam rentetan, pemisahan menjadi lebih kompleks.
Pernyataan Masalah
Andaikan anda mempunyai rentetan seperti "F/P/O" dan mahu membelahnya dengan kejadian paling jauh dari pembatas "/". Hasil yang diingini adalah untuk memisahkan rentetan kepada dua bahagian: "F/P" dan "O."
Percubaan Awal
Pernyataan SQL berikut cuba memisahkan rentetan menggunakan fungsi SUBSTR dan INSTR:
SELECT Substr('F/P/O', 1, Instr('F/P/O', '/') - 1) part1, Substr('F/P/O', Instr('F/P/O', '/') + 1) part2 FROM dual
Walau bagaimanapun, pertanyaan ini menghasilkan hasil yang tidak dijangka, membelah rentetan ke dalam "F" dan "/P/O."
Resolusi
Isunya terletak pada penggunaan fungsi INSTR. Secara lalai, INSTR mencari kejadian pertama bagi pembatas, bukan yang paling jauh. Untuk mencari pembatas paling jauh, fungsi INSTR hendaklah diubah suai untuk mencari dari hujung rentetan:
SELECT SUBSTR(str, 1, Instr(str, '/', -1, 1) -1) part1, SUBSTR(str, Instr(str, '/', -1, 1) +1) part2 FROM DATA
Dengan memulakan carian dari hujung (ditandakan oleh start_position negatif -1), fungsi INSTR mengesan kejadian terakhir pembatas dan membahagi rentetan mengikut kesesuaian kepada "F/P" dan "O." Pendekatan ini memastikan bahawa walaupun terdapat berbilang pembatas dalam rentetan, perpecahan berlaku pada kedudukan paling jauh.
Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Rentetan dalam Oracle SQL Berdasarkan Kejadian Terjauh Pembatas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!