MYSQL中的批量更新

时间:2009-06-27 12:24:46

标签: mysql

我有一个包含一些用户数据的表。

他们中的许多人使用我们在OLDHOST.com的内部电子邮件系统。我们已在NEWHOST.com更新到更新的系统。所有用户的用户名都是一样的,所以如果你有dave@OLDHOST.com,你现在是dave@NEWHOST.com

有没有更好的方法来更改users表中的所有电子邮件字段而不选择PHP中的所有行,然后检查电子邮件中是否包含OLDHOST,然后将字符串替换为NEWHOST?

是否有一个很棒的SQL语句来帮助解决这个问题?


某些表(简化)

的示例
id | firstname | surname | email
------------------------------------------------
1  | dave      | smith   | a21dsmith@OLDHOST.com
2  | barry     | jones   | a21bjones@OLDHOST.com

所有需要更改的内容都是包含OLDHOST(并非所有内容)到NEWHOST的任何电子邮件。

1 个答案:

答案 0 :(得分:7)

您需要在更新语句中替换每个字符串的相关部分,在@之后使用REPLACE获取主机名子字符串,然后替换它。

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

注意:REPLACE() 区分大小写,因此如果需要捕获所有大小写的可能性,可以在REPLACE函数中使用LOWER(email),如下所示:

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

这也会将您的所有电子邮件地址转换为小写,因此请注意:)