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
.
UPDATE table_name
SET field = replace(field, 'string-to-find', 'string-that-will-replace-it');
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');
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.
La fonction Remplacer chaîne le fera.
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.
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.