2012-05-10 8 views
81

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

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

c:\afolder\afilename.bmp 

c:\anewfolder\afilename.bmp 

हो जाता है?

उत्तर

166

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

अन्य स्ट्रिंग परिवर्तन कार्यों (और अधिक) निम्नलिखित सही दिशा में ले जाना चाहिए SQLite core functions list

में विस्तृत कर रहे हैं।

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

+4

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

+2

@WestonWedding मैंने WHERE क्लॉज के साथ और बिना क्वेरी समय की तुलना की है। बिना पूछताछ के दो बार समय ले रहा है। –

20

@Andrew उत्तर आंशिक रूप से सही है।

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

तो सही क्वेरी बस है:

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

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

+0

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

6

और अगर आप अभी तक चलने वाले परिणामों के बिना एक प्रश्न में यह क्या करना चाहते हैं:

SELECT fieldA, replace(field, 'C:\afolder\', 'C:\anewfolder\'), fieldB FROM table;