Question

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

I.e. recherchez foo et remplacez-le par barre afin qu'un enregistrement avec un champ ayant la valeur hello foo devienne hello bar .

Était-ce utile?

La solution

Modifiez nom_table et le champ afin 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;

Autres conseils

UPDATE table_name 
SET field = replace(field, 'string-to-find', 'string-that-will-replace-it');

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.

 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');

La Remplacer la fonction de chaîne sera faire ça.

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 le plus lent, même si la colonne n'est pas indexée.

J'ai utilisé la ligne de commande ci-dessus comme suit: update TABLE-NAME set FIELD = replace (FIELD, 'And', 'and'); le but était de remplacer And with and ("A" devrait être en minuscule). Le problème, c’est qu’il ne trouve pas le fichier "Et". dans la base de données, mais si j'utilise comme "% And%" alors il peut le trouver avec beaucoup d'autres ets qui font partie d'un mot ou même ceux qui sont déjà en minuscules.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top