कुछ परस्पर अनन्य . के एक जोड़े के लिए प्रतिस्थापन, नेस्टेड प्रतिस्थापन कथन सबसे सरल और तेज़ तरीका है। बस जैसे @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()
बयान ठीक हैं। यह वास्तव में "गतिशील" नहीं है। यदि कार्यदिवस केवल समस्या का वर्णन करने के लिए थे और आपको वास्तव में अधिक मामलों या वास्तव में गतिशील तारों से निपटना है, तो मैं एक अलग दृष्टिकोण पर विचार करूंगा। पूरी तरह से गतिशील समाधान ढूंढें इस संबंधित उत्तर में: