【问题标题】:MySQL: split field, do string replace and concat on each part, then rejoinMySQL:拆分字段,对每个部分进行字符串替换和连接,然后重新加入
【发布时间】:2015-04-27 22:30:38
【问题描述】:

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

编辑:在我们服务器上的 MySQL 版本中,我不能执行基于正则表达式的 REPLACE,否则我会使用 REPLACE(email_addresses, '/[,;\s^]+/', '@fake.mydomain .com, ')

【问题讨论】:

  • 为什么需要拆分和重新加入字符串?一个简单的string replace 就足够了吗?
  • @GeorgeCummins 是的,我认为会涉及到拆分,但如果有办法做到这一点,那就太好了。

标签: mysql regex split


【解决方案1】:

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

试试这个:

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

【讨论】:

  • 谢谢杰米。就像我说的,输入是用户生成的,可以包含分号。我想在输出中用", " 替换空格、逗号和分号的任意组合。
  • 可以添加另一个替换以将分号与空格交换,并且您可以修剪数据以删除多余的空格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-12
  • 2020-05-06
  • 2019-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
相关资源
最近更新 更多