2010-10-15 58 views
34

下面是一個示例表:SQL UPDATE中的str_replace?

name  | picture 

John S. | http://servera.host.com/johns.png 
Linda B. | http://servera.host.com/lindab.png 
... 

比方說,有幾百條記錄。

讓我們也說我們將服務器從「servera」移動到「serverb」。

是否有可能進入此表一個查詢重命名列「圖片」中的內容爲每個記錄讀取正確的服務器名稱?

+3

是的,在幾乎每個數據庫引擎上都可以用單個UPDATE查詢。但是,由於您沒有指定特定的產品,因此無論用戶最喜歡的產品是什麼,您都可能只會得到答案。讓我們知道您使用的是什麼,並且有人會回覆該產品的語法。 – 2010-10-15 16:07:29

+0

哦,這是真的 - 謝謝,拉里。我忘了提及我正在開發MySQL – 2010-10-15 16:13:33

+0

這比直接回答你的問題更具體的架構要點,但我建議不要將URL的FQDN存儲在數據庫中。在應用程序代碼中將其保持爲常量,然後在繪製指向圖片的鏈接時,src將合併PIC_HOST_DOMAIN_NAME。'/ johns.png'。這樣可以更輕鬆地移動圖像,還可以使用CDN作爲坐在圖像前面的CNAME。 – 2010-10-15 16:22:04

回答

81

T-SQL:

update TBL 
    set picture = Replace(picture, 'servera', 'serverb') 
where picture like '%servera%' 

甲骨文:

update TBL 
    set picture = replace(picture, 'servera', 'serverb') 
where picture like '%servera%' 

的MySQL:

update TBL 
    set picture = REPLACE(picture, 'servera', 'serverb') 
where picture like '%servera%' 
+0

很高興找到簡單而強大的函數:)感謝MySQL示例。 +1 – Ben 2013-02-27 22:09:24

14
UPDATE users 
SET picture = REPLACE(picture, 'http://servera.host.com/', 'http://serverb.host.com/') 
WHERE picture LIKE 'http://servera.host.com/%'; 

我包括更多的字符串,因爲我擔心'修復'名爲'somethingserverasomething.jpg'的圖片。我可能也會考慮製作一個base_url表格,並將圖像文件名存儲在用戶中,但這不是您要問的問題;-)