我有一个users
表,其中包含user_email
字段。我想替换所有匹配的用户电子邮件:
使用
中随机选择的字符串示例:
在:
--------------------------------------
|user_name | user_email | user_phone |
--------------------------------------
| greg | greg@a.com | 12345 |
--------------------------------------
| harry | harr@b.com | 12345 |
--------------------------------------
| mary | mary@c.com | 12345 |
--------------------------------------
| john | john@x.com | 12345 |
--------------------------------------
| fred | fred@y.com | 12345 |
--------------------------------------
| alfred | al@a.com | 12345 |
--------------------------------------
之后(用“d.com”,“e.com”,“f.com”随机选择一个替换所有“a.com”,“b.com”,“c.com”), “g.com”]:
--------------------------------------
|user_name | user_email | user_phone |
--------------------------------------
| greg | greg@e.com | 12345 |
--------------------------------------
| harry | harr@e.com | 12345 |
--------------------------------------
| mary | mary@f.com | 12345 |
--------------------------------------
| john | john@x.com | 12345 |
--------------------------------------
| fred | fred@y.com | 12345 |
--------------------------------------
| alfred | al@d.com | 12345 |
--------------------------------------
约翰和弗雷德保持不变。 Greg,Harry,Mary和Alfred随机从[“d.com”,“e.com”,“f.com”,“g.com”]中获得一个。
有关如何执行此操作的任何指示? 谢谢
答案 0 :(得分:2)
如果您正在寻找快速而肮脏的解决方案,您可以使用以下内容:
UPDATE
emails
SET
emails.address = CONCAT(SUBSTRING_INDEX(emails.address, '@', 1), '@', ELT(1+rand()*3, 'd.com', 'e.com', 'f.com', 'g.com'))
WHERE
SUBSTRING_INDEX(address, '@', -1) IN ('a.com', 'b.com', 'c.com')
请参阅小提琴here。
使用SUBSTRING_INDEX(address, '@', -1)
您可以获得该地址的域名部分,您可以查看它是a.com,b.com,c.com等。
然后,您可以使用ETL功能更新您的电子邮件地址,连接地址的第一部分SUBSTRING_INDEX(address, '@', -1)
,分隔符@和随机选择的域:
ELT(1+rand()*3, 'd.com', 'e.com', 'f.com', 'g.com')
其中1 + 3是元素的数量。
答案 1 :(得分:0)
我的第一个想法是
UPDATE user
SET user_email = CASE
WHEN user_email LIKE '%a.com' THEN (SELECT REPLACE(user_email, 'a.com', 'd.com'))
ELSE user_email
END
或匹配多个域:
UPDATE email
SET user_email = CASE
WHEN (user_email REGEXP '[a-c].com$')
THEN (SELECT CONCAT((SELECT SUBSTRING_INDEX(user_email, '@', 1)), 'y.com' ))
ELSE user_email
END