2012-04-16 9 views
207

Mam tabeli z następujących kolumn w bazie danych MySQLzaktualizować wartość kolumny, zastępując część łańcucha

[id, url] 

A adresy są jak:

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

Chcę zaktualizować wszystkie adresy URL do innej domeny:

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

zachowanie nazwy pliku bez zmian.

Jakie zapytanie należy uruchomić?

+0

Możliwe duplikaty [zamiany MySQL] (http://stackoverflow.com/questions/5956993/mysql-string-replace) –

Odpowiedz

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

Bardzo przydatny, pracował nad 2000 zapytaniami bez rezultatu, bardzo szybko. – Andy

+1

REPLACE działa również na SELECTs, całkiem przydatne :) – Arda

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

odpowiednich dokumentów: http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_replace

+0

+1 za odniesienie do dokumentacji ... –

+13

Witam - dlaczego potrzebuję gdzie? –

+12

@GuyCohen Ponieważ w przeciwnym razie zapytanie zmodyfikuje każdy wiersz w tabeli. Klauzula "WHERE" optymalizuje zapytanie, aby modyfikować tylko wiersze o określonym adresie URL. Logicznie, wynik będzie taki sam, ale dodanie "GDZIE" spowoduje, że operacja będzie szybsza. –

20

Spróbuj używając REPLACE function:

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

Należy pamiętać, że to jest wielkość liter.

+0

+ do wskazywania wielkości liter. – kubilay

+0

W JAKI SPOSÓB ZROBIĆ - NIEWYRAŹNY? Mam stos plz hlp. thx –

+1

@UniversalGrasp Zobacz wiele możliwych odpowiedzi tutaj: http://stackoverflow.com/questions/5656056/case-insensitive-replace-in-mysql –

8

Trzeba klauzuli GDZIE zastąpić TYLKO rekordy, które spełnia warunek w klauzuli WHERE (w przeciwieństwie do wszystkich rekordów). Używasz znaku %, aby wskazać częściowy ciąg znaków: I.E.

LIKE ("... // domain1.com/images/% '); oznacza wszystkie rekordy, które BEGIN z "... // domain1.com/images/" i mieć coś po (to jest% dla ...)

Inny przykład:

LIKE ('% http://domain1.com/images/% "), co oznacza wszystkie rekordy zawierające" http://domain1.com/images/ " w dowolnej części ciągu ...

Powiązane problemy