MySQL:拆分字段,对每个部分进行字符串替换和concat,然后重新连接

MySQL:拆分字段,对每个部分进行字符串替换和concat,然后重新连接,mysql,regex,split,Mysql,Regex,Split,我在数据库中有一个文本字段,它存储多个电子邮件地址,由空格、逗号和分号混合分隔。这些地址的外观非常随机,因为它是用户输入的数据。我需要更改此字符串中的每个电子邮件地址,以便将@更改为.at。然后将@fake.mydomain.com放在末尾,然后用逗号空格重新加入 举个例子,我想从这里开始 "michael.dolenz@gmail.com, daveyjones@hotmail.co.uk;mike.nesmith.1@foo.com;,petertork@mymail.com" 对此 "m

我在数据库中有一个文本字段,它存储多个电子邮件地址,由空格、逗号和分号混合分隔。这些地址的外观非常随机,因为它是用户输入的数据。我需要更改此字符串中的每个电子邮件地址,以便将@更改为.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"
为了举例说明,该表称为活动,该字段称为电子邮件地址

如果该字段只是一个电子邮件地址,我可以使用它

update campaigns set email_addresses = concat(replace(email_addresses,'@', '.at.'), '@fake.mydomain.com'
因此,我想我需要在正则表达式上进行拆分,比如/[\s,;]+/,对每个部分执行上述操作,然后使用

我可以用一个mysql命令来实现这一点吗? 谢谢,麦克斯


编辑:在我们服务器上的MySQL版本中,我不能进行基于regex的替换,否则我会使用类似replaceMail_addresses,'/[,;\s^]+/','@fake.mydomain.com,'

示例文本中的分号看起来像一个分隔符。根据您的描述,我假设您的示例应该使用所有逗号作为分隔符

试试这个:

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

为什么需要拆分并重新连接字符串?一个简单的就够了吗?@GeorgeCummins是的,我认为会有分裂,但如果有一种不需要分裂的方式,那就太好了。谢谢杰米。正如我所说,输入是用户生成的,可以包含分号。我想在输出中将空格、逗号和分号的任意组合替换为。可以添加另一个替换以将分号替换为空格,也可以修剪数据以删除多余的空格。