2012-07-30 27 views
26

में नियमित अभिव्यक्ति ढूंढें और प्रतिस्थापित करें मेरे पास एक सारणी है जिसमें URL वाली कॉलम वाले कई पंक्तियां हैं। URL फ़ॉर्म में है:पोस्टग्रेस

http://one.example1.com:9999/dotFile.com

मैं समय के बाद सब कुछ को बनाए रखना http://example2.com/dotFile.com साथ उस कॉलम में सभी मैचों को बदलने के लिए करना चाहते हैं: 9999। मुझे regexp_matches और regexp_replace पर कुछ दस्तावेज़ मिल गए हैं, लेकिन मैं इसके चारों ओर अपने सिर को लपेट नहीं सकता।

उत्तर

27

यदि आप यूआरएल जानते हैं, तो आपको रेगेक्स का उपयोग करने की आवश्यकता नहीं है। की जगह() फ़ंक्शन आप के लिए काम करना चाहिए:

replace(string text, from text, to text)   
Replace all occurrences in string of substring from with substring to 
example: replace('abcdefabcdef', 'cd', 'XX') abXXefabXXef 

आप की कोशिश कर सकते:

replace(yourcolumn, 'one.example1.com:9999','example2.com') 
+1

+1:

एक गतिशील स्ट्रिंग बदलने के लिए, आप regexp_replace() इस तरह उपयोग कर सकते हैं। – Tomalak

+5

धन्यवाद, यह चाल है। अद्यतन तालिका एसईटी फ़ील्ड = प्रतिस्थापित करें (फ़ील्ड, 'one.example1.com:9999','example2.com') – ringocub

40

एक निश्चित स्ट्रिंग बदलने के लिए, सरल replace() समारोह का उपयोग करें। व्यावहारिक दृष्टिकोण के लिए

UPDATE 
    YourTable 
SET 
    TheColumn = regexp_replace(
    TheColumn, 'http://[^:\s]+:9999(\S+)', 'http://example2.com\1', 'g' 
) 
+8

'प्रतिस्थापन()' यहां एक आसान काम करता है, जैसा कि आपने पहले ही टिप्पणी की है। हालांकि, "regexp_replace()' के साथ "सभी मैचों" को प्रतिस्थापित करने के लिए, आपको "वैश्विक स्तर" के लिए चौथा पैरामीटर '' g'' .. जोड़ना होगा। –

+0

@Erwin संकेत के लिए धन्यवाद। मैंने इसे शामिल किया है। – Tomalak

+0

मैं एक ऐसे व्यक्ति की तलाश में था जहां मैं 'अद्यतन ... कहां "ईमेल" = regexp_matches ("ईमेल", ई'। [Co.tz] ') कहां दर्ज कर सकता हूं ताकि अद्यतन गति को फ़िल्टर और सुधार सकें। लेकिन यह भी ठीक है, क्योंकि मैं केवल एक बार, विकास में कर रहा हूं। धन्यवाद, क्योंकि मैं वास्तव में 'regexp' समाधान चाहता था। :) – ArchNoob

संबंधित मुद्दे