2012-12-19 46 views
3

這裏是我的情況:MySQL的正則表達式替換

我公司舉辦的客戶端的多個站點和網站的內容都存儲在MySQL數據庫。

我有一個問題,我需要通過整個數據庫並替換部分內容。例如:

我需要//downloads.mysever.com/siteID/someImage.jpg

所以我更換http://downloads.mysever.com/siteID/someImage.jpg只需要從將要下載服務器的所有鏈接中刪除http:

我的問題是什麼是最好的方式去做這件事?我是否需要編寫一個php腳本來處理這個問題,或者我只能使用MySQL來完成這個任務。

感謝

+0

還有就是做一些事情那麼微不足道沒有「最好的辦法」。使用你最喜歡的任何工具。 – meagar

+1

'UPDATE table SET col = SUBSTR(col,6)' – DaveRandom

+0

那麼這可能只是使用MySQL?我不確定在MySQL中是否可以使用正則表達式。我寧願寫一個能夠處理它的查詢,但如果需要,我可以編寫一個PHP腳本。 – noub

回答

0

如果你能夠對數據庫進行脫機簡要拿,我發現最簡單的方法是:

  1. 使用mysqldump導出整個數據庫
  2. 運行一個發現 - 用你喜歡更新數據庫轉儲的編輯器替換
  3. 從轉儲文件重新創建數據庫 - 確保它全部正確,然後用新版本替換原始數據庫。
2

您可以使用SQL語句

UPDATE tablename SET url = REPLACE(url, 'http:', ''); 

閱讀this博客文章

您可以使用命令行執行此命令

mysql -uUSERNAME -p DATABASE_NAME -e "UPDATE tablename SET url = REPLACE(url, 'http:', '')"; 
2

,你可以用純的MySQL這樣做:

update table set field = REPLACE(field, 'http:', '') where INSTR(field, 'http:') > 0; 

請參閱this question

+1

請注意,WHERE條件不是必需的 – hek2mgl

0

MySQL確實提供正則表達式功能。該功能可能過於詳細進入這裏,所以這裏是鏈接:

http://dev.mysql.com/doc/refman/5.5/en/regexp.html

你一個基本用法例樣本的情況將是:然而

UPDATE table SET field = REPLACE(field, 'http:', '') WHERE field REGEXP '^http:' 

注意,這種情況下可能會

UPDATE table SET field = REPLACE(field, 'http:', '') WHERE field LIKE 'http:%' 

所以,你可能不需要使用正則表達式爲每種類型的替代的:通過簡單地這樣做,沒有正則表達式完成你想要做的事情。

0

要刪除所有行領導'http:'字符串(從字符類型的列)在一個表,然後根據這個簡單的東西都可以工作:

UPDATE mytable 
    SET mycol = SUBSTRING(mycol,6) 
WHERE mycol LIKE 'http:%' 

UPDATE:

請注意,使用REPLACE函數將從字符串中替換指定字符串的所有匹配項;它可能不適合僅刪除指定字符串的前導事件。

如果要刪除所有出現的「http:」列值之內找到,那麼:

UPDATE mytable 
    SET mycol = REPLACE(mycol , 'http:, '') 
WHERE mycol LIKE '%http:%' 

的MySQL確實對正則表達式提供支持,具體而言,尋找匹配一個給定的值正則表達式;但MySQL不支持使用正則表達式的「替換」。到位(相當於)的

WHERE mycol REGEXP 'http:' 

所以,你可以在查詢中使用此

WHERE mycol LIKE '%http:%'