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

326

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 souhaite mettre à jour toutes les URL vers un autre domaine

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

conserver le nom du fichier tel quel.

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

Addev
la source
Remplacement
Steve Chambers

Réponses:

683
UPDATE urls
SET url = REPLACE(url, 'domain1.com/images/', 'domain2.com/otherfolder/')
Dmytro Shevchenko
la source
162
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

Marc B
la source
13
Salut, pourquoi ai-je besoin du où?
Guy Cohen
14
@GuyCohen Parce que sinon, la requête modifiera chaque ligne du tableau. La WHEREclause optimise la requête pour modifier uniquement les lignes avec certaines URL. Logiquement, le résultat sera le même, mais l'ajout de WHERErendra l'opération plus rapide.
Dmytro Shevchenko
3
Les WHEREassure également que de vous ne remplacer des parties de chaînes qui commencent avec http://etc/etc/ou string_to_be_replaced., par exemple, dans la réponse donnée, http://domain1.com/images/this/is/a/testseraient affectés, mais foobar/http://domain1.com/images/ne le seraient pas.
Kyle Challis
9

Vous avez besoin de la clause WHERE pour remplacer UNIQUEMENT les enregistrements qui respectent la condition de la clause WHERE (par opposition à tous les enregistrements). Vous utilisez le signe % pour indiquer une chaîne partielle: IE

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

signifie tous les enregistrements qui COMMENCENT 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 tous les enregistrements qui contiennent "http://domain1.com/images/"

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

Kenneth Daly
la source
7

Essaye ça...

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

D'abord, je dois vérifier

SELECT * FROM universityWHERE course_name LIKE '% & amp%'

Ensuite, je dois mettre à jour

UPDATE university SET course_name = REPLACE (course_name, '& amp', '&') WHERE id = 1

Résultats: Engineering & Amp Technology => Engineering & Technology

TechyFlick
la source