Untuk beberapa saling eksklusif penggantian, pernyataan ganti bersarang adalah cara paling sederhana dan tercepat. Cukup seperti yang disarankan @Gordon .
Tapi itu tidak skala baik untuk lebih dari beberapa penggantian dan ada jebakan :
Substring
Menjadi ambigu ketika string dapat menjadi substring satu sama lain. Perhatikan dua ungkapan berikut:
SELECT replace((replace('2015 (Monday)', 'day', 'snake'), 'Monday', 'dog')
, replace((replace('2015 (Monday)', 'Monday', 'dog'), 'day', 'snake');
Hasilnya tergantung pada urutan penggantian. Anda harus menentukan prioritas. Biasanya Anda akan mengganti string yang lebih panjang terlebih dahulu.
Rantai
Kemudian ada juga kemungkinan bahwa satu pengganti dapat membuat kecocokan untuk yang berikutnya:
SELECT replace((replace('2015 (Sunday)', 'Sun', 'Mon'), 'Monday', 'dog')
, replace((replace('2015 (Sunday)', 'Monday', 'dog'), 'Sun', 'Mon');
Sekali lagi, Anda harus menentukan prioritas.
Setiap penggantian mungkin mempengaruhi yang berikutnya. Dengan lebih dari beberapa penggantian, ini menjadi keruh dan rawan kesalahan dengan cepat. Juga sangat sulit untuk dirawat jika penggantian dapat berubah.
Seperti yang saya katakan, hanya dengan hari dalam seminggu, replace()
. bersarang pernyataan baik-baik saja. Itu sebenarnya tidak "dinamis". Jika hari kerja hanya untuk menggambarkan masalah dan Anda benar-benar harus berurusan dengan lebih banyak kasus atau string yang benar-benar dinamis, saya akan mempertimbangkan pendekatan yang berbeda. Temukan solusi dinamis sepenuhnya dalam jawaban terkait ini: