मैं कई रिकॉर्डों में स्ट्रिंग को बदलने के लिए mySQL प्रतिस्थापन () का उपयोग कैसे कर सकता हूं?


166

हमारे पास एक डेटाबेस है जिसमें एक कॉलम में कुछ खराब डेटा के साथ रिकॉर्ड का एक गुच्छा है, जिसमें एक एम्बेडेड संपादक ने कुछ सामान को बचा लिया है जो बच नहीं जाना चाहिए था और यह उत्पन्न लिंक को तोड़ रहा है।

मैं सभी रिकॉर्ड्स में खराब पात्रों को बदलने के लिए एक क्वेरी चलाना चाहता हूं, लेकिन यह पता नहीं लगा सकता कि यह कैसे करना है। मैंने पाया समारोह MySQL में है, लेकिन मैं इसे कैसे एक प्रश्न के अंदर उपयोग कर सकते हैं?replace()

उदाहरण के लिए, यदि मैं स्तंभ में मौजूद सभी अभिलेखों में &lt;वास्तविक कम-कोण कोण ब्रैकेट ( <) के साथ स्ट्रिंग को प्रतिस्थापित करना चाहता हूं, तो सही सिंटैक्स क्या होगा ? क्या यह एक ही क्वेरी में किया जा सकता है (यानी एक ही झटके में सभी का चयन करें और प्रतिस्थापित करें), या क्या मुझे कई प्रश्न करने होंगे? यहां तक ​​कि अगर यह कई प्रश्न हैं, तो मैं एक से अधिक रिकॉर्ड पर एक क्षेत्र के मूल्य पर प्रतिस्थापित करने के लिए कैसे उपयोग करूं?&lt;articleItemreplace()


5
इससे पहले कि आप कुछ भी करें आप डेटाबेस का भी बैकअप लें। आप किसी भी क्षेत्र को अपडेट करने के लिए भी अपडेट का उपयोग करेंगे।
मैट


जवाबों:


395

बहुत ही सामान्य स्तर पर

UPDATE MyTable

SET StringColumn = REPLACE (StringColumn, 'SearchForThis', 'ReplaceWithThis')

WHERE SomeOtherColumn LIKE '%PATTERN%'

आपके मामले में आप कहते हैं कि ये बच गए थे, लेकिन चूंकि आप निर्दिष्ट नहीं करते कि वे कैसे बच गए थे, तो आइए बताते हैं कि वे बच गए GREATERTHAN

UPDATE MyTable

SET StringColumn = REPLACE (StringColumn, 'GREATERTHAN', '>')

WHERE articleItem LIKE '%GREATERTHAN%'

चूँकि आपकी क्वेरी वास्तव में स्ट्रिंग के अंदर काम करने वाली है, इसलिए WHEREइसका पैटर्न मिलान करने वाला आपका क्लॉज किसी भी प्रदर्शन को बेहतर बनाने की संभावना नहीं है - यह वास्तव में सर्वर के लिए अधिक काम उत्पन्न करने वाला है। जब तक आपके पास कोई अन्य ऐसा क्लॉज सदस्य नहीं है जो इस क्वेरी को बेहतर बनाने जा रहा है, आप बस इस तरह से एक अपडेट कर सकते हैं:

UPDATE MyTable
SET StringColumn = REPLACE (StringColumn, 'GREATERTHAN', '>')

आप कई REPLACEकॉल्स भी कर सकते हैं

UPDATE MyTable
SET StringColumn = REPLACE (REPLACE (StringColumn, 'GREATERTHAN', '>'), 'LESSTHAN', '<')

आप ऐसा तब भी कर सकते हैं जब आप डेटा का चयन करते हैं (जैसा कि आप इसे सहेजते समय विरोध करते हैं)।

इसलिए इसके बजाय:

SELECT MyURLString From MyTable

तुम यह कर सकते थे

SELECT REPLACE (MyURLString, 'GREATERTHAN', '>') as MyURLString From MyTable


7
नाबालिग वक्रोक्ति: GREATERTHAN है '>'
ओलिवियर

23
UPDATE some_table SET some_field = REPLACE(some_field, '&lt;', '<')

फिक्स्ड &lt;एस। आपको एन्कोडिंग का उपयोग करने की आवश्यकता है, जैसे: &amp;:)
Dan J

मैंने इसे फिर से संपादित किया। मुझे बताने के लिए धन्यवाद। यह कहने के बाद कि मुझे पता नहीं था कि यह कैसे हुआ है, मुझ पर मोहित हो गया। जिस तरह से मेरी दुनिया काम करती है। :)
सिमशुन

6

इसे देखो

UPDATE some_table SET some_field = REPLACE("Column Name/String", 'Search String', 'Replace String')

उदाहरण के लिए नमूना स्ट्रिंग के साथ:

UPDATE some_table SET some_field = REPLACE("this is test string", 'test', 'sample')

स्तंभ / फ़ील्ड नाम के साथ उदा:

UPDATE some_table SET some_field = REPLACE(columnName, 'test', 'sample')

4

आप इस तरह एक संग्रहीत कार्यविधि लिख सकते हैं:

सृजित प्रक्रिया स्वच्छता / टेबल ()

शुरू

अंडरस्कोर के साथ #replace स्पेस

अद्यतन तालिका सेट फ़ील्ड नाम = उत्तर ( फ़ील्डनाम , "", "_") जहां फ़ील्ड नाम पूर्ण नहीं है;

# डेली डॉट

अद्यतन तालिका सेट फ़ील्ड नाम = उत्तर ( फ़ील्ड नाम , "", "" ") जहां फ़ील्ड नाम पूर्ण नहीं है;

#delete (

अद्यतन तालिका सेट फ़ील्ड नाम = उत्तर ( फ़ील्डनाम , "(", "") जहां फ़ील्ड नाम पूर्ण नहीं है;

# डेली)

अद्यतन तालिका सेट फ़ील्डनाम = उत्तर ( फ़ील्डनाम , ")", "") जहाँ फ़ील्ड नाम पूर्ण नहीं है;

# अपने इच्छित किसी भी चार्ट को हटाएं या हटाएं

# ..........................

समाप्त

इस तरह आपके पास टेबल पर मॉड्यूलर नियंत्रण है।

आप इसे संग्रहित करने की प्रक्रिया को भी सामान्य बना सकते हैं, तालिका को sanitoze इनपुट पैरामीटर के साथ पैरामीट्रिक


1
वे अशक्त जांच निरर्थक हैं
kiedysktos

क्या mysql संग्रहित प्रक्रिया बनाने के लिए कोई आसान और सुरक्षित उपकरण हैं?
इवान स्लॉटर

0

इससे आपको मदद मिलेगी।

UPDATE play_school_data SET title= REPLACE(title, "&#39;", "'") WHERE title = "Elmer&#39;s Parade";

परिणाम:

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