Para alguns mutuamente exclusivos substituições, instruções de substituição aninhadas são a maneira mais simples e rápida. Apenas como @Gordon sugere .
Mas isso não funciona bem para mais do que algumas substituições e existem armadilhas :
Substrings
Torna-se ambíguo quando as strings podem ser substrings umas das outras. Considere estas duas expressões:
SELECT replace((replace('2015 (Monday)', 'day', 'snake'), 'Monday', 'dog')
, replace((replace('2015 (Monday)', 'Monday', 'dog'), 'day', 'snake');
O resultado depende da sequência de substituições. Você tem que definir prioridades. Normalmente, você substituiria as strings mais longas primeiro.
Correntes
Depois, há também a possibilidade de que uma substituição possa criar uma correspondência para a próxima:
SELECT replace((replace('2015 (Sunday)', 'Sun', 'Mon'), 'Monday', 'dog')
, replace((replace('2015 (Sunday)', 'Monday', 'dog'), 'Sun', 'Mon');
Novamente, você tem que definir prioridades.
Cada substituição possivelmente influencia a próxima. Com mais do que algumas substituições, isso se torna obscuro e propenso a erros rapidamente. Também muito difícil de manter se as substituições podem mudar.
Como eu disse, com apenas os dias da semana,
replace()
aninhado declarações estão bem. Isso não é realmente "dinâmico". Se os dias da semana fossem apenas para ilustrar o problema e você realmente tivesse que lidar com mais casos ou strings verdadeiramente dinâmicas, eu consideraria uma abordagem diferente. Encontre soluções totalmente dinâmicas nesta resposta relacionada: