web-dev-qa-db-ja.com

MySQLはフィールド内のテキストを検索して置換します

どのMySQLクエリがテキスト検索を行い、テーブル内の特定のフィールドで置き換えますか?

つまりfooを検索し、barに置き換えて、値がhello fooのフィールドを持つレコードがhello barになるようにします。

237
julz

table_namefieldを変更して、問題のテーブル名とフィールドに一致させます。

UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE INSTR(field, 'foo') > 0;
455
Joe Skora
UPDATE table_name 
SET field = replace(field, 'string-to-find', 'string-that-will-replace-it');
81
thesmallprint

また、別のフィールドの値に基づいて検索および置換する場合は、CONCATを実行できます。

update table_name set `field_name` = replace(`field_name`,'YOUR_OLD_STRING',CONCAT('NEW_STRING',`OTHER_FIELD_VALUE`,'AFTER_IF_NEEDED'));

他の人がすぐに見つけられるように、これをここに置いてください。

6
basdog22
 UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);

たとえば、ジョンのすべての出現をマークで置き換える場合は、以下を使用します。

UPDATE student SET student_name = replace(student_name, 'John', 'Mark');
6
Umesh Patil

Replace 文字列関数がそれを行います。

1
Wayne

私の経験では、最速の方法は

UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE field LIKE '%foo%';

INSTR()の方法は2番目に高速で、WHERE句を完全に省略するのは、列にインデックスが付けられていない場合でも最も遅くなります。

1
Gaspy

上記のコマンドラインを次のように使用しました。TABLE-NAMEを更新します。目的はAndをandに置き換えることでした(「A」は小文字である必要があります)。問題は、データベースで「And」を見つけることができないことですが、「%And%」のように使用すると、Wordの一部である他の多くのandまたはすでに小文字のandとともに見つけることができます。

0
Schwann