web-dev-qa-db-fra.com

Mettre à jour une valeur de colonne en remplaçant une partie d'une chaîne

J'ai une table avec les colonnes suivantes dans une base de données MySQL

[id, url]

Et les URL sont comme:

 http://domain1.com/images/img1.jpg

Je veux mettre à jour toutes les URL vers un autre domaine

 http://domain2.com/otherfolder/img1.jpg

garder le nom du fichier tel quel.

Quelle est la requête dois-je exécuter?

292
Addev
UPDATE urls
SET url = REPLACE(url, 'domain1.com/images/', 'domain2.com/otherfolder/')
616
Dmytro Shevchenko
UPDATE yourtable
SET url = REPLACE(url, 'http://domain1.com/images/', 'http://domain2.com/otherfolder/')
WHERE url LIKE ('http://domain1.com/images/%');

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

148
Marc B

Essayez d’utiliser la fonction REPLACE :

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

Notez qu'il est sensible à la casse.

25
schellack

Vous avez besoin de la clause WHERE pour remplacer ONLY les enregistrements conformes à la condition de la clause WHERE (par opposition à tous les enregistrements). Vous utilisez le signe % pour indiquer une chaîne partielle: I.E.

LIKE ('...//domain1.com/images/%');

signifie que tous les enregistrements BEGIN avec "...//domain1.com/images/" et ont quelque chose APRÈS (c'est le % pour ...)

Un autre exemple:

LIKE ('%http://domain1.com/images/%')

ce qui signifie que tous les enregistrements contenant "http://domain1.com/images/"

dans n'importe quelle partie de la chaîne ...

9
Kenneth Daly

Essaye ça...

update [table_name] set [field_name] = 
replace([field_name],'[string_to_find]','[string_to_replace]');
3
ManiMaran A