我在数据库中有一个文本字段,它存储多个电子邮件地址,由空格,逗号和分号混合在一起(这些字符的外观非常随机,因为它是用户输入的数据)。我需要更改此字符串中的每个电子邮件地址,以便将“@”更改为“.at”。然后在最后输入“@ fake.mydomain.com”,然后用“,”,即逗号空间重新加入它们。
所以,例如,我想从这个
开始"michael.dolenz@gmail.com, daveyjones@hotmail.co.uk;mike.nesmith.1@foo.com;,petertork@mymail.com"
到这个
"michael.dolenz.at.gmail.com@fake.mydomain.com, daveyjones.at.hotmail.co.uk@fake.mydomain.com, mike.nesmith.1.at.foo.com@fake.mydomain.com, petertork.at.mymail.com@fake.mydomain.com"
为了举例,该表名为campaigns
,该字段名为email_addresses
。
如果该字段只是一个电子邮件地址,我可以使用
update campaigns set email_addresses = concat(replace(email_addresses,'@', '.at.'), '@fake.mydomain.com'
所以我想我需要做“拆分正则表达式,如/ [\ s,;] + /”,对每个部分执行上述操作,然后使用“,”加入。
我可以用一个mysql命令执行此操作吗? 谢谢,Max
编辑:在我们服务器上的MySQL版本中,我不能使用基于正则表达式的REPLACE,否则我会使用类似REPLACE(email_addresses,'/ [,; \ s ^] + /','@ fake.mydomain .com,')答案 0 :(得分:0)
示例文本看起来像是一个分界符,看起来像一个分隔符。我假设您的示例应该根据您的描述将所有逗号都作为分隔符。
试试这个:
select concat(replace(replace('michael.dolenz@gmail.com, daveyjones@hotmail.co.uk,mike.nesmith.1@foo.com,petertork@mymail.com','@','.at.'),',','@fake.mydomain.com,'),'@fake.mydomain.com');
输出如下:
michael.dolenz.at.gmail.com@fake.mydomain.com,daveyjones.at.hotmail.co.uk @ fake.mydomain.com,mike.nesmith.1.at.foo.com @ fake.mydomain .COM,petertork.at.mymail.com @ fake.mydomain.com
基本上,将'@'替换为'.at。',将逗号替换为'@ fake.mydomain.com',并将@ fake.mydomain.com添加到最后一个没有的字段逗号分隔符。