在mysql列中查找非连续重复文本

时间:2015-12-28 09:37:36

标签: mysql sql regex email

我有一个包含大量电子邮件地址的数据库。

由于脚本中存在错误,数据库中的电子邮件地址错误。这些地址有一个已知的模式。

它们由真正的电子邮件地址组成,在开头与字符串连接。 此字符串本身就是电子邮件地址的一部分。

示例:

正确的电子邮件应该是:

john.doe@example.com

相反,我有:

doejohn.doe@example.com

或者:

johndoejohn.doe@example.com

如何识别这些地址?

我考虑创建一个在字符串中找到重复文本的正则表达式,但我可以找到如何做到这一点。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您可以使用以下查询来处理LASTNAMEfirstname.lastname@something.com模式,这将首先找到last_name,然后在第一个.之前的第一部分中将其替换为null。

concat(replace(substr(email,1,locate('.',email)),substr(email,LOCATE('.',email)+1,locate('@',email)-LOCATE('.',email)-1),'')
   ,
   substr(email,locate('.',email)+1,length(email))
   )

请参阅此处的SQL小提琴示例

http://sqlfiddle.com/#!9/24fba/2

但这不会照顾FIRSTNAMElastnameFIRSTNAME.lastname@example.com模式。

答案 1 :(得分:1)

现在无法测试,但这可能会有效:

^([^@]{5,})[^@]{1,}\.\1@[^@]+$