173 votes

Comment utiliser mySQL replace () pour remplacer des chaînes dans plusieurs enregistrements?

Nous avons une base de données qui a un tas de documents, avec quelques mauvaises données dans une colonne, dans laquelle un intégré à l'éditeur échappé à certaines choses qui ne devraient pas avoir été échappé et c'est la rupture des liens générés.

Je veux exécuter une requête pour remplacer les mauvais caractères dans tous les enregistrements, mais ne peuvent pas comprendre comment le faire. J'ai trouvé l' replace() fonction de MySQL, mais comment puis-je l'utiliser à l'intérieur d'une requête?

Par exemple, quelle serait la syntaxe correcte si je voulais remplacer la chaîne de caractères &lt; avec un effectif inférieur à l'angle de support (<) dans tous les dossiers qui ont &lt; dans la articleItem de la colonne? Peut-il être fait en une seule requête (c'est à dire sélectionner et de les remplacer en un seul coup), ou dois-je faire plusieurs requêtes? Même si c'est plusieurs requêtes, comment puis-je utiliser replace() faire le remplacer sur la valeur d'un champ sur plus d'un enregistrement?

413voto

Raj More Points 22358

À un niveau très générique

UPDATE MyTable

SET StringColumn = REPLACE (StringColumn, 'SearchForThis', 'ReplaceWithThis')

WHERE SomeOtherColumn LIKE '%PATTERN%'

Dans votre cas vous dire que ces ont été échappé, mais puisque vous ne précisez pas comment ils ont échappé à, disons qu'elles ont échappé à l' GREATERTHAN

UPDATE MyTable

SET StringColumn = REPLACE (StringColumn, 'GREATERTHAN', '<')

WHERE articleItem LIKE '%GREATERTHAN%'

Depuis votre requête est, en réalité, va travailler à l'intérieur de la chaîne, votre WHERE clause de faire son pattern matching est peu probable pour améliorer la performance, il est, en réalité, va générer plus de travail pour le serveur. Sauf si vous avez une autre clause where membre qui est en train de faire cette requête de mieux fonctionner, vous pouvez simplement faire une mise à jour comme ceci:

UPDATE MyTable

SET StringColumn = REPLACE (StringColumn, 'GREATERTHAN', '<')

En provenance d'un angle complètement différent:

Vous pouvez le faire lorsque vous sélectionnez les données (et non pas lorsque vous ne l'enregistrer)

Ainsi, au lieu de :

SELECT MyURLString From MyTable

Vous pourriez faire

SELECT REPLACE (MyURLString, 'GREATERTHAN', '<') as MyURLString From MyTable

27voto

simshaun Points 14463
UPDATE some_table SET some_field = REPLACE(some_field, '&lt;', '<')

6voto

Mahendra Points 474

Vérifie ça

 UPDATE some_table SET some_field = REPLACE("Column Name/String", 'Search String', 'Replace String')
 

Exemple: avec exemple de chaîne:

 UPDATE some_table SET some_field = REPLACE("this is test string", 'test', 'sample')
 

EG avec nom de colonne / champ:

 UPDATE some_table SET some_field = REPLACE(columnName, 'test', 'sample')
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X