মাইএসকিউএল স্ট্রিং প্রতিস্থাপন


559

আমার কাছে একটি কলাম রয়েছে যাতে ইউআরএল রয়েছে (আইডি, ইউআরএল):

http://www.example.com/articles/updates/43
http://www.example.com/articles/updates/866
http://www.example.com/articles/updates/323
http://www.example.com/articles/updates/seo-url
http://www.example.com/articles/updates/4?something=test

আমি "আপডেট" শব্দটি "সংবাদ" এ পরিবর্তন করতে চাই। স্ক্রিপ্ট দিয়ে এটি করা কি সম্ভব?


উত্তর:


1283
UPDATE your_table
SET your_field = REPLACE(your_field, 'articles/updates/', 'articles/news/')
WHERE your_field LIKE '%articles/updates/%'

সারিগুলি এখন যেমন ছিল

http://www.example.com/articles/updates/43

হবে

http://www.example.com/articles/news/43

http://www.electrictoolbox.com/mysql-find-replace-text/


23
দ্রুত প্রশ্ন, "WHERE" ধারাটি কি আসলেই দরকার?
জন ক্রফোর্ড

55
লিঙ্কের নিবন্ধ অনুসারে @ জনক্রাফোর্ড: "আপনাকে অবশ্যই WHERE LIKEশেষ পর্যন্ত ক্লজটি যুক্ত করতে হবে না , কারণ যদি পাঠ্যটি সন্ধান না করা হয় তবে সারিটি আপডেট করা হবে না, তবে এটির বিষয়টিকে দ্রুত করা উচিত । "
গিরালদী

3
যেখানে শৃঙ্খলা আপনাকে প্রতিস্থাপনের ক্ষেত্রে নির্দিষ্ট নিয়ন্ত্রণ দেয়। একটি ছাড়া প্রতিটি সারিতে পরীক্ষা করা হবে এবং কোনও মিল পাওয়া গেলে সম্ভাব্য ডেটা প্রতিস্থাপন করা হবে।
কার্লটন

11
আমি এক্ষেত্রে বিশ্বাস করি যেখানে নিরর্থক কারণ LIKE '%%'এগুলি কোনও সূচক ব্যবহার করে না, যদি সেখানে আরও কিছু অংশ থাকে তবে উদাহরণস্বরূপ date_added > '2014-07-01'এটির মতো কিছু হতে পারে
ফ্যাব্রিজিও


141

হ্যাঁ, মাইএসকিউএল-এর একটি রিপ্লেস () ফাংশন রয়েছে:

mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');
    -> 'WwWwWw.mysql.com'

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_replace

মনে রাখবেন যে আপনি যদি ব্যবহারের সময় এটি একটি উপনাম তৈরি করেন তবে এটি আরও সহজ SELECT

SELECT REPLACE(string_column, 'search', 'replace') as url....

যতক্ষণ না ওপি'র updatesকেবল স্ট্রিংটিতে একবার দেখা যায়, তখন এটি কাজ করবে। অন্যথায় আপনি ডাইরেক্ট স্ট্রিং ম্যানিপুলেশনে আটকে আছেন যা মাইএসকিউএলে আসল ব্যথা। এই মুহুর্তে ক্ষেত্রগুলি নির্বাচন করতে ক্লায়েন্টে হেরফের, তারপরে আবার লিখতে ওয়ান-অফ স্ক্রিপ্ট লেখা সহজ হবে be
মার্ক বি

20

প্রতিস্থাপন ফাংশন তোমার জন্য কাজ করা উচিত।

REPLACE(str,from_str,to_str)

স্ট্রিংটি_স্ট্রিস্ট দ্বারা প্রতিস্থাপিত_আরস্ট্রি থেকে স্ট্রিংয়ের সমস্ত উপস্থিতি সহ স্ট্রিং স্ট্রিং ফেরত দেয়। REPLACE()from_str থেকে অনুসন্ধান করার সময় কেস-সংবেদনশীল মিলটি সম্পাদন করে।


9

আপনি কেবল প্রতিস্থাপন () ফাংশনটি ব্যবহার করতে পারেন,

যেখানে ক্লজ-

update tabelName set columnName=REPLACE(columnName,'from','to') where condition;

যেখানে ক্লজ- ছাড়া

update tabelName set columnName=REPLACE(columnName,'from','to');

দ্রষ্টব্য: উপরের ক্যোয়ারী যদি সঠিকভাবে টেবিলের রেকর্ডের জন্য থাকে তবে আপনি যদি নির্বাচিত ক্যোয়ারিতে চান এবং ডেটাটি টেবিলে প্রভাবিত না হওয়া উচিত তবে নীচের প্রশ্নটি ব্যবহার করতে পারেন-

select REPLACE(columnName,'from','to') as updateRecord;

6

গামাগিওর উত্তর ছাড়াও যদি আপনার গতিশীলভাবে প্রয়োজন হয় REPLACEএবং UPDATEঅন্য কলাম অনুসারে আপনি উদাহরণস্বরূপ করতে পারেন:

UPDATE your_table t1
INNER JOIN other_table t2
ON t1.field_id = t2.field_id
SET t1.your_field = IF(LOCATE('articles/updates/', t1.your_field) > 0, 
REPLACE(t1.your_field, 'articles/updates/', t2.new_folder), t1.your_field) 
WHERE...

আমার উদাহরণে স্ট্রিং articles/news/মধ্যে সংরক্ষিত হয় other_table t2এবং ব্যবহার করা কোন প্রয়োজন নেই LIKEWHEREদফা।

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