2009-06-27 226 views
4

我有一個表包含有關某些用戶的數據。批量更新MYSQL

其中許多人使用我們的內部電子郵件系統在OLDHOST.com。我們已經更新到NEWHOST.com的新系統。所有用戶的用戶名是相同的,所以如果你有[email protected],你現在是[email protected]

有沒有更好的方法來更改用戶表中的所有電子郵件字段,而不選擇所有的行在說PHP,然後檢查電子郵件是否有OLDHOST,然後將字符串替換爲NEWHOST?

有沒有一個出色的真棒SQL語句來幫助解決這個問題?的一些表中的


實施例(簡化的)

id | firstname | surname | email 
------------------------------------------------ 
1 | dave  | smith | [email protected] 
2 | barry  | jones | [email protected] 

所有需要被改變的是,包含OLDHOST任何電子郵件(並非所有做)至NEWHOST。

回答

7

您需要替換更新語句中每個字符串的相關部分,使用REPLACE獲取@後的主機名子字符串,並替換它。

UPDATE table SET email=REPLACE(email,'OLDHOST.com', 'newhost.com'); 

注意:REPLACE()大小寫敏感的,所以你可以按照以下使用LOWER(email) REPLACE函數裏面,如果你需要捕獲所有情況的可能性,:

UPDATE table SET email=REPLACE(LOWER(email),'oldhost.com', 'newhost.com'); 

這也將將所有的電子郵件地址轉換爲小寫,所以請注意:)

+0

不,對不起 - 這是一個電子郵件地址存儲爲每個用戶在一個名爲電子郵件列作爲字符串。 – 2009-06-27 12:29:31