我有一个包含一些用户数据的表。
他们中的许多人使用我们在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的任何电子邮件。
答案 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');
这也会将您的所有电子邮件地址转换为小写,因此请注意:)