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?


Réponses:



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


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 ...


7

Essaye ça...

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

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.