Remplacer la chaîne MySQL

j'ai une colonne contenant des urls (id, url):

http://www.example.com/articles/updates/43
http://www.example.com/articles/updates/866
http://www.example.com/articles/updates/323
http://www.example.com/articles/updates/seo-url
http://www.example.com/articles/updates/4?something=test

j'aimerais remplacer le mot" updates "par"news". Est-il possible de faire cela avec un script?

473
demandé sur William Perron 2011-05-11 01:58:03

5 réponses

UPDATE your_table
SET your_field = REPLACE(your_field, 'articles/updates/', 'articles/news/')
WHERE your_field LIKE '%articles/updates/%'

maintenant les lignes qui étaient comme

http://www.example.com/articles/updates/43

sera

http://www.example.com/articles/news/43

http://www.electrictoolbox.com/mysql-find-replace-text /

1103
répondu Giraldi 2017-12-15 10:47:44

Oui, MySQL a une fonction REPLACE ():

mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');
    -> 'WwWwWw.mysql.com'

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_replace

notez que c'est plus facile si vous faites un alias en utilisant SELECT

SELECT REPLACE(string_column, 'search', 'replace') as url....
131
répondu onteria_ 2011-05-10 22:01:31

la fonction remplacer devrait fonctionner pour vous.

REPLACE(str,from_str,to_str)

Retourne la chaîne str avec toutes les occurrences de la chaîne from_str remplacée par la chaîne to_str. REPLACE() effectue une correspondance sensible à la casse lors de la recherche de from_str.

16
répondu Jay 2017-06-22 14:38:56

vous pouvez simplement utiliser remplacer () la fonction,

avec clause where -

update tabelName set columnName=REPLACE(columnName,'from','to') where condition;

sans clause où -

update tabelName set columnName=REPLACE(columnName,'from','to');

Note: la requête ci-dessus si pour les enregistrements de mise à jour directement dans la table, si vous voulez sur Sélectionner requête et les données ne devraient pas être affectés dans la table alors peut utiliser la requête suivante -

select REPLACE(columnName,'from','to') as updateRecord;
7
répondu Deepak Kumbhar 2018-01-30 11:41:03

en plus de la réponse de gmaggio si vous avez besoin de dynamiquement REPLACE et UPDATE selon une autre colonne, vous pouvez faire par exemple:

UPDATE your_table t1
INNER JOIN other_table t2
ON t1.field_id = t2.field_id
SET t1.your_field = IF(LOCATE('articles/updates/', t1.your_field) > 0, 
REPLACE(t1.your_field, 'articles/updates/', t2.new_folder), t1.your_field) 
WHERE...

Dans mon exemple, la chaîne articles/news/ est stocké dans other_table t2 et il n'est pas nécessaire d'utiliser LIKE dans le WHERE clause.

6
répondu RafaSashi 2013-10-13 16:09:11