2012-04-16 78 views
207

我有以下的列的表在MySQL數據庫中更新列值,字符串

[id, url] 

,並且URL都喜歡的替換部分:

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

我要更新所有該網址爲另一個域名

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

保持文件的名稱原樣。

我必須運行什麼查詢?

+0

[MySQL字符串替換]的可能重複(http://stackoverflow.com/questions/5956993/mysql-string-replace ) – 2016-08-02 13:59:52

回答

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

非常有用,非常快速地處理2000查詢失敗。 – Andy 2016-12-14 18:05:03

+1

更換也適用於選擇,相當有用:) – Arda 2017-04-19 10:20:15

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

相關文檔:http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_replace

+0

+1爲文檔的參考... – 2014-08-14 16:19:27

+13

嗨那裏 - 爲什麼我需要在哪裏? – 2014-10-07 14:21:56

+12

@GuyCohen因爲否則查詢將修改表中的每一行。 WHERE子句將查詢優化爲僅修改具有特定URL的行。從邏輯上講,結果將是相同的,但增加'WHERE'會使操作更快。 – 2015-08-14 14:34:42

20

嘗試使用REPLACE function

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

注意,它是區分大小寫。

+0

+用於指向大小寫敏感。 – kubilay 2012-12-31 11:24:17

+0

你如何做案例 - 不靈活? Am stack plz hlp。 thx – 2013-12-26 14:05:36

+1

@UniversalGrasp在這裏看到很多可能的答案:http://stackoverflow.com/questions/5656056/case-insensitive-replace-in-mysql – 2016-03-09 15:05:35

8

您需要WHERE子句更換ONLY,在與符合條件的記錄WHERE子句(而不是所有記錄)。您使用符號來表示部分字符串:I.E.

LIKE('... // domain1.com/images/%');意味着BEGIN與 「... // domain1.com/images/」 和有什麼畢竟記錄(這是針對%...)

又如:

LIKE('%http://domain1.com/images/% ')這意味着在字符串的任何部分包含「http://domain1.com/images/」 的所有記錄...