如何使用错误的电子邮件收集和清理数据库条目

时间:2011-10-12 19:24:16

标签: sql database

所以我被赋予了通过我们的邮件列表和“清理”稍微不正确的电子邮件的任务(拖尾符号,意外地在电子邮件中间的随机符号,语法上无效等)并删除这些条目完全是虚假的。问题是我发现数据库中的一些电子邮件已经在语法上得到纠正,但原始条目仍然存在。有超过2000封电子邮件,我的查询返回不正确(似乎过去的清理工作遇到了超过10,000封坏电子邮件!)并且一次一个地通过它们并不好。有没有人对如何解决这个问题有任何建议?

以下是我用来返回不良邮件的查询:

 SELECT id,email
 FROM table
 WHERE NOT
 (
 CHARINDEX(' ',LTRIM(RTRIM([email]))) = 0 
 AND   LEFT(LTRIM([email]),1) <> '@' 
 AND   RIGHT(RTRIM([email]),1) <> '.' 
 AND   CHARINDEX('.',[Email],CHARINDEX('@',[email])) - CHARINDEX('@',[email]) > 1 
 AND   LEN(LTRIM(RTRIM([email]))) - LEN(REPLACE(LTRIM(RTRIM([email])),'@','')) = 1 
 AND   CHARINDEX('.',REVERSE(LTRIM(RTRIM([email])))) >= 3 
 AND   (CHARINDEX('.@',[email]) = 0 AND CHARINDEX('..',[email]) = 0)
 )
 or id in (select id from table where email like '%[+;(,!]%')       

1 个答案:

答案 0 :(得分:0)

这个问题已经在Stack Overflow上被问及(并且有所回答) - T-SQL: checking for email format

我建议使用http://tools.ietf.org/html/rfc3696来提出解决方案。

此外,不要假设二级域名总是最多四个字符 - 在新西兰,我们最长的二级域名是“.parliament.nz”。我使用“.geek.nz”二级域名,并且经常让网站告诉我这是一个无效的电子邮件地址。

维基百科的文章,http://en.wikipedia.org/wiki/Email_address#Valid_email_addresses也提供了丰富的信息 - 以下是所有有效的电子邮件地址

  • niceandsimple@example.com
  • a.little.unusual@example.com
  • 很多。“更多\不寻常”@ example.com
  • very.unusual。 “@”。unusual.com@example.com
  • 非常。“(),:;&lt;&gt; []”。非常。“非常\\ \ @”非常“.unusual @ cool.example.com