どのMySQLクエリがテキスト検索を行い、テーブル内の特定のフィールドで置き換えますか?
つまりfoo
を検索し、bar
に置き換えて、値がhello foo
のフィールドを持つレコードがhello bar
になるようにします。
UPDATE table_name
SET field = replace(field, 'string-to-find', 'string-that-will-replace-it');
また、別のフィールドの値に基づいて検索および置換する場合は、CONCATを実行できます。
update table_name set `field_name` = replace(`field_name`,'YOUR_OLD_STRING',CONCAT('NEW_STRING',`OTHER_FIELD_VALUE`,'AFTER_IF_NEEDED'));
他の人がすぐに見つけられるように、これをここに置いてください。
UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);
たとえば、ジョンのすべての出現をマークで置き換える場合は、以下を使用します。
UPDATE student SET student_name = replace(student_name, 'John', 'Mark');
Replace 文字列関数がそれを行います。
私の経験では、最速の方法は
UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE field LIKE '%foo%';
INSTR()
の方法は2番目に高速で、WHERE
句を完全に省略するのは、列にインデックスが付けられていない場合でも最も遅くなります。
上記のコマンドラインを次のように使用しました。TABLE-NAMEを更新します。目的はAndをandに置き換えることでした(「A」は小文字である必要があります)。問題は、データベースで「And」を見つけることができないことですが、「%And%」のように使用すると、Wordの一部である他の多くのandまたはすでに小文字のandとともに見つけることができます。