MySQL एक क्षेत्र में कुछ पाठ को खोजता है और प्रतिस्थापित करता है


257

MySQL क्वेरी एक पाठ खोज और एक विशेष क्षेत्र में एक तालिका में बदल देगी?

यानी खोज fooऔर barमूल्य के साथ एक क्षेत्र के साथ एक रिकॉर्ड के साथ बदल hello fooजाता है hello bar

जवाबों:


490

अपने तालिका नाम और फ़ील्ड को प्रश्न में बदलें table_nameऔर बदलें field:

UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE INSTR(field, 'foo') > 0;

79
अद्यतन [तालिका_नाम] सेट [क्षेत्र_नाम] = उत्तर दें ( [field_name], "फू", "बार");
Meetai.com

6
मुझे लगता है कि इसका उपयोग न करना अधिक तेज़ है WHERE instr(field, 'foo') > 0;(इसलिए यह 2 खोज नहीं करेगा) ... क्या मैं गलत हूं?
इनमेन्जा

2
@treddell, SQL स्ट्रिंग्स में कोई भी स्थिति 1 से शुरू नहीं होती है।
एलेक्सिस विलके

2
@inemanja, @ बिना किसी WHEREखंड के आप UPDATEसभी पंक्तियों पर करते हैं ...
एलेक्सिस विल्के

7
Pring की तरह, अगर आप उस तरह की टिप्पणी छोड़ने जा रहे हैं, तो आप क्यों समझाना चाहते हैं। क्या यह मूल सलाह में गलती थी, या आपकी ओर से गलती थी? और आप जानते हैं कि इससे पहले कि आप किसी डेटाबेस में कोई व्यापक बदलाव करें, आप पहले इसे वापस लेने वाले हैं?
pdwalker

86
UPDATE table_name 
SET field = replace(field, 'string-to-find', 'string-that-will-replace-it');

2
मेरी मदद की। सभी नोब्स के लिए, कृपया वर्ग कोष्ठक हटा दें।
अनंत राजू C

8
 UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);

उदाहरण के लिए, अगर मैं मार्क द्वारा जॉन की सभी घटनाओं को बदलना चाहता हूं, तो मैं नीचे उपयोग करूंगा,

UPDATE student SET student_name = replace(student_name, 'John', 'Mark');

6

और यदि आप किसी अन्य क्षेत्र के मूल्य के आधार पर खोजना और बदलना चाहते हैं तो आप एक CONCAT कर सकते हैं:

update table_name set `field_name` = replace(`field_name`,'YOUR_OLD_STRING',CONCAT('NEW_STRING',`OTHER_FIELD_VALUE`,'AFTER_IF_NEEDED'));

बस यह एक यहाँ है ताकि दूसरों को यह एक ही बार में मिल जाएगा।



4

मेरे अनुभव में, सबसे तेज़ तरीका है

UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE field LIKE '%foo%';

INSTR()तरीका है दूसरी सबसे तेज और छोड़ते हुए WHEREखंड कुल मिलाकर, धीमी है, भले ही स्तंभ अनुक्रमित नहीं है।


मेरे लिए काम करता है क्योंकि मुझे एक और खंड जोड़ने की आवश्यकता है जहां। अद्यतन तालिका_नाम सेट फ़ील्ड = रिपोर्ट (फ़ील्ड, 'फू', 'बार') जहां फ़ील्ड '% फू%' और अन्य क्षेत्र = 'foo22'
अधिकतम

1

बदलें स्ट्रिंग समारोह है कि क्या करेंगे।


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

0

मैंने निम्न कमांड लाइन का उपयोग निम्नानुसार किया: TABLE-NAME सेट FIELD = प्रतिस्थापन (FIELD, 'और', 'और') को अपडेट करें; उद्देश्य को प्रतिस्थापित करना था और उसके साथ ("ए" को कमतर होना चाहिए)। समस्या यह है कि यह डेटाबेस में "और" नहीं मिल सकता है, लेकिन अगर मैं "% और%" की तरह उपयोग करता हूं, तो यह कई अन्य और ands के साथ मिल सकता है जो एक शब्द का हिस्सा हैं या यहां तक ​​कि पहले से ही लोअरकेस हैं।

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