Aggiorna un valore di colonna, sostituendo parte di una stringa


326

Ho una tabella con le seguenti colonne in un database MySQL

[id, url]

E gli URL sono come:

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

Voglio aggiornare tutti gli URL a un altro dominio

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

mantenendo il nome del file così com'è.

Qual è la query che devo eseguire?


Risposte:



162
UPDATE yourtable
SET url = REPLACE(url, 'http://domain1.com/images/', 'http://domain2.com/otherfolder/')
WHERE url LIKE ('http://domain1.com/images/%');

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


13
Ciao, perché ho bisogno del dove?
Guy Cohen,

14
@GuyCohen Perché altrimenti la query modificherà ogni singola riga nella tabella. La WHEREclausola ottimizza la query per modificare le righe solo con un determinato URL. Logicamente, il risultato sarà lo stesso, ma l'aggiunta di WHERErenderà l'operazione più veloce.
Dmytro Shevchenko,

3
Le WHEREassicura anche che si sta sostituendo solo le parti di stringhe che iniziano con http://etc/etc/o string_to_be_replaced., ad esempio, nella risposta data, http://domain1.com/images/this/is/a/testsarebbero stati colpiti, ma foobar/http://domain1.com/images/non sarebbe.
Kyle Challis,


9

È necessario la clausola WHERE per sostituire SOLO i record che soddisfano la condizione nella clausola WHERE (rispetto a tutti i record). Si utilizza il segno % per indicare la stringa parziale: IE

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

significa tutti i record che BEGIN con "...//domain1.com/images/"e hanno nulla dopo (che è il %per ...)

Un altro esempio:

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

il che significa tutti i record che contiene "http://domain1.com/images/"

in qualsiasi parte della stringa ...


7

Prova questo...

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

1

Per prima cosa, devi controllare

SELEZIONA * DA universityDOVE course_name COME '% & amp%'

Successivamente, è necessario aggiornare

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

Risultati: Engineering & amp Technology => Engineering & Technology

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.