কেন কোনও আপডেট সেট রিপ্লেস () বিবৃতিটি সারিগুলির সাথে মেলে তবে কোনওটিই পরিবর্তন করে না এবং কোনও সতর্কতা দেয় না কেন?


9

আমি একটি ক্ষেত্রের একটি নির্দিষ্ট স্ট্রিং খুঁজছি এবং একটি নতুন স্ট্রিং সঙ্গে এটি প্রতিস্থাপন করতে চাই। বিশেষত, আমি চাই একটি ইউআরএল এর সমস্ত উল্লেখ অন্য ইউআরএলে পরিবর্তন করা হোক। আমি এই এসকিউএল বিবৃতিটি তৈরি করেছি এবং এটি mysql>মাইএসকিউএল কমিউনিটি সার্ভার 5.1.54 ব্যবহার করে সেন্টোস 5.5- এ একটি প্রম্পটে চালাচ্ছি।

update [table] set [field] = REPLACE([field],'%domain.com%','%domain.org%');

প্রতিক্রিয়াটি হ'ল:

Query OK, 0 rows affected (0.02 sec)
Rows matched: 618  Changed: 0  Warnings: 0

কোনও পরিবর্তন কেন করা হচ্ছে না তা আমি কীভাবে ট্র্যাক করব?

সম্পাদনা 1:

অ্যারন বারট্র্যান্ডকে ধন্যবাদ, আমি আবিষ্কার করেছি যে REPLACE()ওয়াইল্ডকার্ড পরিচালনা করতে পারে না এবং আমি এটি সম্পূর্ণরূপে ভুল ব্যবহার করেছি (মনে করুন: WHEREঅনুচ্ছেদে অনুপস্থিত )। আমার সংস্কারিত বক্তব্যটি এখানে:

UPDATE [table]
SET [column] =
REPLACE (
    [column],
    'companydomain.com',
    'companydomain.org' )
WHERE
    [column]
LIKE
    '%companydomain.com%';

যার কাছে আমি পুরানো, পরিচিত:

Query OK, 0 rows affected (0.02 sec)
Rows matched: 167  Changed: 0  Warnings: 0

আমি কী ভুল করছি?

সম্পাদনা 2:

আমি বলছিলাম আমি কী ভুল করছিলাম !! আমি অনুমান নিয়ে প্রশ্ন করছিলাম না। আমার ধারণাটি ছিল যে আমি যে স্ট্রিংটি প্রতিস্থাপন করছি তা সমস্ত নিম্নতর ক্ষেত্রে ছিল। WHERE ধারাটি যে সমস্ত জিনিস দেখেছিল তা ফিরিয়ে দিচ্ছেLIKE %companydomain.com%। এর মধ্যে সমস্ত ক্যাপিটালাইজেশন অনুমতি যেমন কোম্পানীডোমেন ডটকম, কোএমপএএনওয়াইডএইএমইএন ডটকম এবং ইত্যাদি অন্তর্ভুক্ত রয়েছে etc.

এটি REPLACE()এরপরে কেটেডোডোমেন.কম এর সাথে ক্রেডিট ডোমেন.ওর.র সাথে এটির পরিবর্তে কঠোরভাবে সন্ধান করছে।

REPLACE (
    [column],
    'companydomain.com',
    'companydomain.org' )

অবশ্যই আমার রেকর্ডগুলি ফিরিয়ে দেওয়া হচ্ছে, তবে কিছুই প্রতিস্থাপন করা হচ্ছে না। একবার আমি REPLACE()মূলধনকে আমলে নেওয়ার জন্য পরিবর্তিত হয়ে গেলে সমস্ত রেকর্ড আপডেট হয়েছিল এবং দেখা যাচ্ছে যে সবকিছু ঠিক আছে। REPLACE()আমার দৃশ্যের জন্য সঠিক বাক্য গঠনটি ছিল:

REPLACE (
    [column],
    'CompanyDomain.com',
    'companydomain.org' )

উত্তর:


12

REPLACEওয়াইল্ডকার্ডের সাথে সেভাবে খেলবে না। আমি মনে করি আপনি বোঝাতে চেয়েছিলেন:

UPDATE [table] 
  SET [column] = REPLACE([column],'TLD.com','TLD.org')
  WHERE [column] LIKE '%TLD.com%';

আপনার কোনও WHEREধারা নেই, সুতরাং এটি 618 টি সারি আপডেট করার চেষ্টা করেছিল , কিন্তু এটি %TLD.com%কলামে কোনও উদাহরণ খুঁজে পায় নি । কোন সারিগুলি প্রভাবিত হবে তা দেখতে, এর SELECTপরিবর্তে একটি চালান :

SELECT [column], REPLACE([column], 'TLD.com', 'TLD.org') AS new_value
  FROM [table]
  WHERE [column] LIKE '%TLD.com%';

0

প্রথমত, আমাদের একটি selectক্যোয়ারী ব্যবহার করে পরীক্ষা করতে হবে :

SELECT * FROM colleges
WHERE course_name LIKE '%&amp%'

পরবর্তী, আমাদের আপডেট করতে হবে:

UPDATE colleges
SET course_name = REPLACE(course_name, '&amp', '&')
WHERE id = 1

ফলাফল: Cloud &amp Enterprise ComputingCloud & Enterprise Computing

সবশেষে, আমাদের সকলের জন্য আবেদন করতে হবে:

UPDATE colleges
SET course_name = REPLACE(course_name, '&amp', '&')

ফলাফল: Corporate &amp Insolvency LawCorporate & Insolvency Law

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