2012-04-16 11 views
207

Ho una tabella con le seguenti colonne in un database MySQLaggiornare un valore di colonna, in sostituzione di parte di una stringa

[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?

+0

eventuali duplicati di [MySQL stringa sostituire] (http://stackoverflow.com/questions/5956993/mysql-string-replace) –

risposta

443
UPDATE urls 
SET url = REPLACE(url, 'domain1.com/images/', 'domain2.com/otherfolder/') 
+0

Molto utile, ha funzionato su 2000 query senza esito negativo, molto rapidamente. – Andy

+1

REPLACE funziona anche su SELECTs, molto utile :) – Arda

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

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

+0

+1 per il riferimento alla documentazione ... –

+13

Ciao, perché ho bisogno di dove? –

+12

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

20

Cercare di utilizzare il REPLACE function:

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

Nota che è case sensitive.

+0

+ per indicare la distinzione tra maiuscole e minuscole. – kubilay

+0

Come si fa CASE - INSENSITIVE? Sono stack plz hlp. grazie –

+1

@UniversalGrasp Vedi qui molte risposte possibili: http://stackoverflow.com/questions/5656056/case-insensitive-replace-in-mysql –

8

È necessario la clausola WHERE per sostituire SOLO i record conforme alle condizioni nella clausola WHERE (al contrario di tutti i record). Si utilizza il segno % per indicare la stringa parziale: I.E.

LIKE ('... // dominio1.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/% '), che significa tutti i record che contengono 'http://domain1.com/images/' in qualsiasi parte della stringa ...

Problemi correlati