所以我被赋予了通过我们的邮件列表和“清理”稍微不正确的电子邮件的任务(拖尾符号,意外地在电子邮件中间的随机符号,语法上无效等)并删除这些条目完全是虚假的。问题是我发现数据库中的一些电子邮件已经在语法上得到纠正,但原始条目仍然存在。有超过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 '%[+;(,!]%')
答案 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也提供了丰富的信息 - 以下是所有有效的电子邮件地址