PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

मान के आधार पर किसी स्ट्रिंग को सूची से किसी अन्य स्ट्रिंग से बदलें

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मुझे CSV आयात करते समय postgresql में टाइप पूर्णांक के लिए अमान्य इनपुट सिंटैक्स क्यों मिल रहा है?

  2. कई User_ID को एक ही रूप में संदर्भित और सहेजना

  3. ब्रैकेट के बीच अल्पविराम वाले डेटा के साथ CSV से PostgreSQL तालिका लोड करें

  4. जॉइन के बाद ग्रुप या DISTINCT डुप्लीकेट लौटाता है

  5. त्रुटि:ALTER TYPE... ADD लेन-देन ब्लॉक के अंदर नहीं चल सकता