Postgresql में, मैं एक डेटाबेस कॉलम के भीतर स्ट्रिंग के सभी उदाहरणों को कैसे बदलूं?
मैं के सभी उदाहरणों को बदलना चाहते कहो cat
साथ dog
उदाहरण के लिए,।
ऐसा करने का सबसे अच्छा तरीका क्या है?
Postgresql में, मैं एक डेटाबेस कॉलम के भीतर स्ट्रिंग के सभी उदाहरणों को कैसे बदलूं?
मैं के सभी उदाहरणों को बदलना चाहते कहो cat
साथ dog
उदाहरण के लिए,।
ऐसा करने का सबसे अच्छा तरीका क्या है?
जवाबों:
आप postgresql की जगह फ़ंक्शन का उपयोग करना चाहते हैं :
replace(string text, from text, to text)
उदाहरण के लिए :
UPDATE <table> SET <field> = replace(<field>, 'cat', 'dog')
हालाँकि, अवगत रहें, कि यह एक स्ट्रिंग-टू-स्ट्रिंग प्रतिस्थापन होगा, इसलिए 'श्रेणी' 'dogegory' बन जाएगी। regexp_replace फ़ंक्शन आपको जो बदलना चाहते हैं उसके लिए एक सख्त मैच पैटर्न को परिभाषित करने में मदद कर सकता है।
regexp_replace
यदि आपको सख्त प्रतिस्थापन मिलान की आवश्यकता है, तो PostgreSQL का regexp_replace
कार्य POSIX नियमित अभिव्यक्ति पैटर्न का उपयोग करके मेल कर सकता है। इसमें सिंटैक्स regexp_replace (स्रोत, पैटर्न, प्रतिस्थापन [, झंडे]) है ।
मैं क्रमशः झंडे i
और g
केस-असंवेदनशील और वैश्विक मिलान के लिए उपयोग करूंगा । मैं किसी शब्द की शुरुआत और अंत का क्रमशः उपयोग \m
और \M
मिलान भी करूंगा ।
रेगेक्स प्रतिकृति को निष्पादित करते समय आमतौर पर काफी कुछ गोच होते हैं। आइए देखें कि बिल्ली को कुत्ते से बदलना कितना आसान है ।
SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog');
--> Cat bobdog cat cats catfish
SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog', 'i');
--> dog bobcat cat cats catfish
SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog', 'g');
--> Cat bobdog dog dogs dogfish
SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog', 'gi');
--> dog bobdog dog dogs dogfish
SELECT regexp_replace('Cat bobcat cat cats catfish', '\mcat', 'dog', 'gi');
--> dog bobcat dog dogs dogfish
SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat\M', 'dog', 'gi');
--> dog bobdog dog cats catfish
SELECT regexp_replace('Cat bobcat cat cats catfish', '\mcat\M', 'dog', 'gi');
--> dog bobcat dog cats catfish
SELECT regexp_replace('Cat bobcat cat cats catfish', '\mcat(s?)\M', 'dog\1', 'gi');
--> dog bobcat dog dogs catfish
इतना सब होने के बाद भी कम से कम है एक अनसुलझी स्थिति है। उदाहरण के लिए, "कैट" से शुरू होने वाले वाक्यों को लोअर-केस "डॉग" से बदल दिया जाएगा जो वाक्य कैपिटलाइज़ेशन को तोड़ते हैं।
वर्तमान PostgreSQL की जाँच करें सभी विवरणों के लिए पैटर्न मिलान डॉक्स देखें।
मेरे उदाहरणों को देखते हुए, शायद सबसे सुरक्षित विकल्प होगा:
UPDATE table SET field = regexp_replace(field, '\mcat\M', 'dog', 'gi');
आप replace
फ़ंक्शन का उपयोग कर सकते हैं
UPDATE your_table SET field = REPLACE(your_field, 'cat','dog')
फ़ंक्शन की परिभाषा इस प्रकार है ( यहाँ से प्राप्त ):
replace(string text, from text, to text)
और संशोधित पाठ लौटाता है। आप इस sql फिडेल को भी देख सकते हैं ।
यहाँ एक उदाहरण है जो नियमित अभिव्यक्ति का उपयोग कर अंडरस्कोर के साथ एक कॉलम में 1 या अधिक श्वेत अंतरिक्ष वर्णों के सभी उदाहरणों को बदलता है -
select distinct on (pd)
regexp_replace(rndc.pd, '\\s+', '_','g') as pd
from rndc14_ndc_mstr rndc;