MySQL स्ट्रिंग प्रतिस्थापित करता है


559

मेरे पास एक कॉलम है जिसमें urls (id, url) है:

http://www.example.com/articles/updates/43
http://www.example.com/articles/updates/866
http://www.example.com/articles/updates/323
http://www.example.com/articles/updates/seo-url
http://www.example.com/articles/updates/4?something=test

मैं "अपडेट" शब्द को "समाचार" में बदलना चाहता हूं। क्या स्क्रिप्ट के साथ ऐसा करना संभव है?


जवाबों:


1283
UPDATE your_table
SET your_field = REPLACE(your_field, 'articles/updates/', 'articles/news/')
WHERE your_field LIKE '%articles/updates/%'

अब जैसी पंक्तियाँ थीं

http://www.example.com/articles/updates/43

होगा

http://www.example.com/articles/news/43

http://www.electrictoolbox.com/mysql-find-replace-text/


23
त्वरित प्रश्न, क्या वास्तव में "WHERE" क्लॉज होना आवश्यक है?
जॉन क्रॉफोर्ड

55
@JohnCrawford लिंक में दिए गए लेख के अनुसार: "आपको जरूरी नहीं कि WHERE LIKEअंत में खंड जोड़ना है , क्योंकि यदि खोजने के लिए पाठ नहीं है तो पंक्ति को अपडेट नहीं किया जाएगा, लेकिन इससे चीजों को गति मिलनी चाहिए । "
गिरलड़ी

3
जहां क्लॉज़ आपको प्रतिस्थापित हो जाता है उस पर विशिष्ट नियंत्रण देता है। एक पंक्ति के बिना हर पंक्ति की जाँच की जाएगी और एक मिलान पाए जाने पर संभावित डेटा को बदल दिया जाएगा।
कार्लटन

11
मेरा मानना ​​है कि इस मामले में WHERE बेकार है क्योंकि LIKE '%%'किसी भी इंडेक्स का उपयोग नहीं करता है, अगर उस हिस्से में अन्य भाग होते हैं, उदाहरण के लिए, कुछ इस तरह से date_added > '2014-07-01'मदद की हो सकती है
Fabrizio

13
मैं हमेशा संदर्भ के लिए यहां आता हूं जब मुझे mysql में कुछ बदलने की आवश्यकता होती है
डैनियल पेचर

141

हां, MySQL का REPLACE () फ़ंक्शन है:

mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');
    -> 'WwWwWw.mysql.com'

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_replace

ध्यान दें कि यदि आप उपयोग करते समय इसे एक उपनाम बनाते हैं तो यह आसान है SELECT

SELECT REPLACE(string_column, 'search', 'replace') as url....

जब तक ओपी के updatesकेवल एक बार स्ट्रिंग में दिखाई देता है, तब तक यह काम करेगा। अन्यथा आप सीधे स्ट्रिंग हेरफेर के साथ फंस गए हैं जो MySQL में एक वास्तविक दर्द है। उस समय फ़ील्ड का चयन करना, क्लाइंट में हेरफेर करना, फिर वापस लिखना आसान होगा।
मार्क बी

20

प्रतिस्थापित कार्य आपके लिए काम करना चाहिए।

REPLACE(str,from_str,to_str)

स्ट्रिंग के सभी आवृत्तियों के साथ स्ट्रिंग स्ट्रिंग को लौटाता है from_str को स्ट्रिंग के द्वारा प्रतिस्थापित किया जाता है। REPLACE()from_str की खोज करते समय एक केस-संवेदी मैच करता है।


9

आप बस प्रतिस्थापित () फ़ंक्शन का उपयोग कर सकते हैं,

जहां खंड के साथ-

update tabelName set columnName=REPLACE(columnName,'from','to') where condition;

बिना क्लॉज-

update tabelName set columnName=REPLACE(columnName,'from','to');

नोट: उपरोक्त क्वेरी यदि तालिका में सीधे अपडेट रिकॉर्ड के लिए है, यदि आप चुनिंदा क्वेरी पर चाहते हैं और डेटा तालिका में प्रभावित नहीं होना चाहिए तो निम्न क्वेरी का उपयोग कर सकते हैं-

select REPLACE(columnName,'from','to') as updateRecord;

6

यदि आपको गतिशील रूप से REPLACEऔर UPDATEकिसी अन्य स्तंभ के अनुसार उदाहरण के लिए आवश्यकता हो तो gmaggio के उत्तर के अलावा :

UPDATE your_table t1
INNER JOIN other_table t2
ON t1.field_id = t2.field_id
SET t1.your_field = IF(LOCATE('articles/updates/', t1.your_field) > 0, 
REPLACE(t1.your_field, 'articles/updates/', t2.new_folder), t1.your_field) 
WHERE...

मेरे उदाहरण में स्ट्रिंग articles/news/को संग्रहीत किया गया है other_table t2और खंड LIKEमें उपयोग करने की कोई आवश्यकता नहीं है WHERE

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.