For et par gensidigt udelukkende erstatninger, indlejrede erstatningsudsagn er den enkleste og hurtigste måde. Bare som @Gordon foreslår .
Men det kan ikke skaleres godt til mere end et par udskiftninger, og der er faldgruber :
Understrenge
Det bliver tvetydigt, når strenge kan være understrenge af hinanden. Overvej disse to udtryk:
SELECT replace((replace('2015 (Monday)', 'day', 'snake'), 'Monday', 'dog')
, replace((replace('2015 (Monday)', 'Monday', 'dog'), 'day', 'snake');
Resultatet afhænger af rækkefølgen af udskiftninger. Du skal definere prioriteter. Typisk ville du erstatte længere strenge først.
Kæder
Så er der også mulighed for, at den ene udskiftning kan skabe et match til den næste:
SELECT replace((replace('2015 (Sunday)', 'Sun', 'Mon'), 'Monday', 'dog')
, replace((replace('2015 (Sunday)', 'Monday', 'dog'), 'Sun', 'Mon');
Igen skal du definere prioriteter.
Hver udskiftning påvirker muligvis den næste. Med mere end et par udskiftninger bliver dette uklart og hurtigt udsat for fejl. Også meget svært at vedligeholde, hvis udskiftninger kan ændre sig.
Som jeg sagde, med kun ugedagene, indlejrede replace()
udtalelser er fine. Det er faktisk ikke "dynamisk". Hvis hverdage blot skulle illustrere problemet, og du faktisk skal håndtere flere cases eller virkelig dynamiske strenge, ville jeg overveje en anden tilgang. Find fuldstændig dynamiske løsninger i dette relaterede svar: