SQLite - एक स्ट्रिंग का हिस्सा बदलें


104

क्या स्ट्रिंग के भाग को बदलने के लिए तालिका SQLमें उपयोग करना संभव है SQLite?

उदाहरण के लिए, मेरे पास एक मेज है जहां एक फ़ील्ड एक फ़ाइल का मार्ग रखती है। क्या स्ट्रिंग के कुछ हिस्सों को बदलना संभव है ताकि, उदाहरण के लिए

c:\afolder\afilename.bmp

हो जाता है

c:\anewfolder\afilename.bmp

?

जवाबों:


207

आप replace()क्वेरी में प्रतिस्थापित स्ट्रिंग करने के लिए अंतर्निहित फ़ंक्शन का उपयोग कर सकते हैं ।

अन्य स्ट्रिंग हेरफेर फ़ंक्शन (और अधिक) SQLite कोर फ़ंक्शन सूची में विस्तृत हैं

निम्नलिखित आपको सही दिशा में इंगित करना चाहिए।

UPDATE table SET field = replace( field, 'C:\afolder\', 'C:\anewfolder\' ) WHERE field LIKE 'C:\afolder\%';


6
जबकि WHERE क्लॉज़ आवश्यक नहीं है, लेकिन यह मन की थोड़ी शांति देता है। WHERE के बिना, SqlLite आपको बताएगा कि आपकी तालिका की प्रत्येक पंक्ति प्रभावित हुई थी। WHERE का उपयोग करने से, आपको संभावित दर्जनों के बजाय केवल दर्जन या तो पंक्तियाँ मिलेंगी।
वेस्टन वेडिंग

2
@WestonWedding मैं कहाँ और बिना खंड के साथ क्वेरी समय की तुलना की है। जिसके बिना क्वेरी को दो बार लिया जा रहा है।
पराग बाफना

FYI करें, यह और vladkras का समाधान मामला संवेदनशील है। मैंने इसे केस असंवेदनशील बनाने के लिए LIKE स्टेटमेंट डालने का प्रयोग किया, लेकिन मैं इसे काम नहीं कर पाया, मुझे नहीं लगता कि SQLite रिप्लेसमेंट कमांड से यह संभव है।
शैडोलिबरल

धन्यवाद। Darktable छवियों के स्थान को स्टोर करने के लिए एक स्क्वैलाइट db का उपयोग करता है, इसलिए इसने मुझे लगभग 9000 बदलावों से बचाया!
फिल

30

@ और उत्तर आंशिक रूप से सही है। WHEREयहां क्लॉज का उपयोग करने की आवश्यकता नहीं है:

  1. केवल फ़ील्ड्स युक्त C:\afolder वैसे भी प्रभावित होंगे, इसकी जाँच करने का कोई कारण नहीं। यह अत्यधिक है।
  2. 'C:\afolder\%'केवल के साथ शुरू केवल क्षेत्रों का चयन करेंगे C:\afolder\। यदि आपके पास स्ट्रिंग के अंदर यह रास्ता है तो क्या होगा?

इसलिए सही क्वेरी सिर्फ:

UPDATE table SET field = replace( field, 'C:\afolder\', 'C:\anewfolder\');

क्या यह कॉलम "फ़ील्ड" में प्रत्येक स्ट्रिंग में स्ट्रिंग को बदल देगा?
पंद्रह

@fifaltra हाँ यह होगा
resedasue

ध्यान दें कि मैं प्रतिस्थापित () का उपयोग करने की अनुशंसा नहीं करूंगा जब आप फ़ाइल सिस्टम पथ को अपडेट करना चाहते हैं, तो वे सापेक्ष हैं (पूर्ण के बजाय)। देखें stackoverflow.com/questions/50161090/...
NameZero912

10

और अगर आप इसे बिना किसी स्थायी परिणाम के क्वेरी में करना चाहते हैं:

SELECT fieldA, replace(field, 'C:\afolder\', 'C:\anewfolder\'), fieldB FROM table;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.