За няколко взаимно изключващи се замени, вложените изрази за замяна са най-простият и бърз начин. Точно както @Gordon предлага .
Но това не се мащабира добре за повече от няколко замени и има клопки :
Поднизове
Става двусмислено, когато низовете могат да бъдат поднизове един на друг. Разгледайте тези два израза:
SELECT replace((replace('2015 (Monday)', 'day', 'snake'), 'Monday', 'dog')
, replace((replace('2015 (Monday)', 'Monday', 'dog'), 'day', 'snake');
Резултатът зависи от последователността на заместванията. Трябва да определите приоритетите. Обикновено първо ще замените по-дългите низове.
Вериги
След това има и възможност една замяна да създаде съвпадение за следващата:
SELECT replace((replace('2015 (Sunday)', 'Sun', 'Mon'), 'Monday', 'dog')
, replace((replace('2015 (Sunday)', 'Monday', 'dog'), 'Sun', 'Mon');
Отново трябва да определите приоритетите.
Всяка замяна може да повлияе на следващата. С повече от няколко замени, това бързо става мътно и податливо на грешки. Също така е много трудно да се поддържа, ако заместителите могат да се променят.
Както казах, само с дните от седмицата, вложен replace()
изявленията са добри. Това всъщност не е "динамично". Ако делничните дни бяха само за илюстриране на проблема и всъщност трябва да се справяте с повече случаи или наистина динамични низове, бих обмислил различен подход. Намерете напълно динамични решения в този свързан отговор: