postgresql - পাঠ্য ক্ষেত্রের মধ্যে একটি স্ট্রিংয়ের সমস্ত উদাহরণ প্রতিস্থাপন করুন


213

Postgresql এ, আমি কীভাবে একটি ডাটাবেস কলামের মধ্যে স্ট্রিংয়ের সমস্ত দৃষ্টান্ত প্রতিস্থাপন করব?

বলুন আমি উদাহরণস্বরূপ সমস্ত দৃষ্টান্তের catসাথে প্রতিস্থাপন করতে চাই dog

এটি করার সর্বোত্তম উপায় কী?


7
যদি গুগলিং ব্যর্থ হয় তবে ম্যানুয়ালটি ব্যবহার করে দেখুন: postgresql.org/docs/current/static/function-string.html
a_horse_with_no_name

উত্তর:


404

আপনি পোস্টগ্র্যাসিকেলের প্রতিস্থাপন ফাংশনটি ব্যবহার করতে চান :

replace(string text, from text, to text)

এই ক্ষেত্রে :

UPDATE <table> SET <field> = replace(<field>, 'cat', 'dog')

তবে সচেতন থাকুন যে এটি স্ট্রিং-টু-স্ট্রিং প্রতিস্থাপন হবে, সুতরাং 'বিভাগ' হয়ে উঠবে 'ডোজেগরি'। regexp_replace ফাংশন আপনাকে প্রতিস্থাপন করতে চাইলে একটি কঠোর ম্যাচ প্যাটার্ন নির্ধারণ করতে সহায়তা করতে পারে।


4
হাই ছেলেরা, আমি আপনার উত্তর এবং ব্যাখ্যা পছন্দ করি, এটি সত্যই সহায়ক। আপনি দয়া করে regexp_replace ব্যবহার করে একটি উদাহরণ যুক্ত করতে পারেন? ধন্যবাদ!
উইম ফেইজেন

1
উন্নততর গ্রানুলারিটির জন্য, আপনি ব্যবহার করতে পারেনregexp_replace
ডিআরএস

83

নিয়মিত এক্সপ্রেশন ওয়ে

আপনার যদি কঠোর প্রতিস্থাপনের ম্যাচিংয়ের প্রয়োজন হয় তবে পোস্টগ্রিসএসকিউএল এর 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

এত কিছুর পরেও কমপক্ষে একটি অমীমাংসিত অবস্থা রয়েছে। উদাহরণস্বরূপ, "বিড়াল" দিয়ে শুরু হওয়া বাক্যগুলিকে ছোট-বড় "কুকুর" দিয়ে প্রতিস্থাপন করা হবে যা বাক্য মূলধনকে ভেঙে দেয়।

সমস্ত বিবরণের জন্য বর্তমান পোস্টগ্রাইএসকিউএল প্যাটার্নের সাথে মেলে দস্তাবেজগুলি দেখুন।

প্রতিস্থাপন পাঠ্য সহ পুরো কলাম আপডেট করুন

আমার উদাহরণ দেওয়া, সম্ভবত সবচেয়ে নিরাপদ বিকল্প হতে পারে:

UPDATE table SET field = regexp_replace(field, '\mcat\M', 'dog', 'gi');

30

আপনি replaceফাংশন ব্যবহার করতে পারেন

UPDATE your_table SET field = REPLACE(your_field, 'cat','dog')

ফাংশন সংজ্ঞা নিম্নরূপ (থেকে পেয়েছেন করা হয় এখানে ):

replace(string text, from text, to text)

এবং পরিবর্তিত পাঠ্য ফেরত দেয়। আপনি এই বর্গক্ষেত্রের উচ্চারণটিও পরীক্ষা করে দেখতে পারেন ।


0

এখানে একটি উদাহরণ যা নিয়মিত এক্সপ্রেশন ব্যবহার করে আন্ডারস্কোর দিয়ে কলামে 1 বা ততোধিক সাদা স্থানের সমস্ত অক্ষরের প্রতিস্থাপন করে -

select distinct on (pd)
regexp_replace(rndc.pd, '\\s+', '_','g') as pd
from rndc14_ndc_mstr rndc;

"S" এর আগে কেবল একটি ব্যাকস্ল্যাশ দরকার মনে করি
মার্টি নিল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.