MySQL:拆分字段,在每个部分上执行字符串替换和连接,然后重新加入

时间:2015-04-27 14:10:28

标签: mysql regex split

我在数据库中有一个文本字段,它存储多个电子邮件地址,由空格,逗号和分号混合在一起(这些字符的外观非常随机,因为它是用户输入的数据)。我需要更改此字符串中的每个电子邮件地址,以便将“@”更改为“.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,')

1 个答案:

答案 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添加到最后一个没有的字段逗号分隔符。