web-dev-qa-db-fra.com

MySQL recherche et remplace du texte dans un champ

Quelle requête MySQL effectuera une recherche de texte et la remplacera dans un champ particulier d'une table?

C'est à dire. recherchez foo et remplacez par bar afin qu'un enregistrement avec un champ avec la valeur hello foo devienne hello bar.

231
julz

Modifiez table_name et field pour qu'ils correspondent au nom de la table et au champ en question:

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

Comme par exemple, si je veux remplacer toutes les occurrences de John par Mark, je vais utiliser ci-dessous, 

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

Et si vous souhaitez rechercher et remplacer en fonction de la valeur d'un autre champ, vous pouvez effectuer un CONCAT:

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

Juste pour avoir celui-ci ici pour que les autres le trouvent immédiatement.

5
basdog22

La fonction Remplacer chaîne le fera.

1
Wayne

J'ai utilisé la ligne de commande ci-dessus de la manière suivante: ). Le problème est qu'il ne peut pas trouver le "Et" dans la base de données, mais si j'utilise comme "% et%", il peut le trouver avec beaucoup d'autres ands faisant partie d'un mot ou même ceux déjà en minuscule.

0
Schwann

D'après mon expérience, la méthode la plus rapide est

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

La méthode INSTR() est la deuxième plus rapide et omettre la clause WHERE est la plus lente, même si la colonne n'est pas indexée.

0
Gaspy