用于查找无效电子邮件地址的Sql脚本

cam*_*mpo 61 sql email validation

数据导入是从访问数据库完成的,电子邮件地址字段没有验证.有没有人有一个可以返回无效电子邮件地址列表的sql脚本(缺少@等).

谢谢!

Tom*_*lak 150

SELECT * FROM people WHERE email NOT LIKE '%_@__%.__%'
Run Code Online (Sandbox Code Playgroud)

任何更复杂的东西都可能会返回漏报并且运行得更慢.

在代码中验证电子邮件地址几乎是不可能的.

编辑:相关问题

  • 我已经使用过这个了,多年来它并没有让我失望.我认为自己非常擅长正则表达式,但我认为一个圆筒形写了这个http://ex-parrot.com/~pdw/Mail-RFC822-Address.html (5认同)
  • q.com是美国流行的电子邮件提供商.可能想尝试'不喜欢'%_@%_.__%'`(在`@`之后有一个字符) (4认同)
  • 甚至称其为“不太可能”已经很英国了。该表达式不适用于验证电子邮件地址或检查所有极端情况。这是一项基本的健全性检查,涵盖所有情况的99.9%,而不会产生假阴性,我没有另外指出。 (3认同)
  • 评论"太复杂和错误",其次是"太简单",很好地总结了所有电子邮件验证.这是一个很好的理智检查表达,在许多情况下非常有用. (3认同)

Esp*_*spo 19

这是一个快速简便的解决方案:

CREATE FUNCTION dbo.vaValidEmail(@EMAIL varchar(100))

RETURNS bit as
BEGIN     
  DECLARE @bitRetVal as Bit
  IF (@EMAIL <> '' AND @EMAIL NOT LIKE '_%@__%.__%')
     SET @bitRetVal = 0  -- Invalid
  ELSE 
    SET @bitRetVal = 1   -- Valid
  RETURN @bitRetVal
END 
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用以下函数查找所有行:

SELECT * FROM users WHERE dbo.vaValidEmail(email) = 0
Run Code Online (Sandbox Code Playgroud)

如果您对在数据库中创建函数不满意,可以直接在查询中使用LIKE子句:

SELECT * FROM users WHERE email NOT LIKE '_%@__%.__%'
Run Code Online (Sandbox Code Playgroud)

资源


Jac*_*lan 6

我发现这个简单的T-SQL查询对于返回有效的电子邮件地址非常有用

SELECT email
FROM People
WHERE email LIKE '%_@__%.__%' 
    AND PATINDEX('%[^a-z,0-9,@,.,_]%', REPLACE(email, '-', 'a')) = 0
Run Code Online (Sandbox Code Playgroud)

PATINDEX位删除所有包含不在允许的az,0-9,'@','.','_'和' - '字符集中的字符的电子邮件地址.

它可以反过来做你想要的这样:

SELECT email
FROM People
WHERE NOT (email LIKE '%_@__%.__%' 
    AND PATINDEX('%[^a-z,0-9,@,.,_]%', REPLACE(email, '-', 'a')) = 0)
Run Code Online (Sandbox Code Playgroud)

  • 您可以通过像这样转义连字符来消除 REPLACE 函数:`AND PATINDEX('%[^az,0-9,@,.,_,\-]%', email) = 0` (2认同)

小智 5

select
    email 
from loginuser where
patindex ('%[ &'',":;!+=\/()<>]*%', email) > 0  -- Invalid characters
or patindex ('[@.-_]%', email) > 0   -- Valid but cannot be starting character
or patindex ('%[@.-_]', email) > 0   -- Valid but cannot be ending character
or email not like '%@%.%'   -- Must contain at least one @ and one .
or email like '%..%'        -- Cannot have two periods in a row
or email like '%@%@%'       -- Cannot have two @ anywhere
or email like '%.@%' or email like '%@.%' -- Cant have @ and . next to each other
or email like '%.cm' or email like '%.co' -- Unlikely. Probably typos 
or email like '%.or' or email like '%.ne' -- Missing last letter
Run Code Online (Sandbox Code Playgroud)

这对我有用。必须应用 rtrim 和 ltrim 以避免误报。

来源:http : //sevenwires.blogspot.com/2008/09/sql-how-to-find-invalid-email-in-sql.html

Postgres 版本:

select user_guid, user_guid email_address, creation_date, email_verified, active
from user_data where
length(substring (email_address from '%[ &'',":;!+=\/()<>]%')) > 0  -- Invalid characters
or length(substring (email_address from '[@.-_]%')) > 0   -- Valid but cannot be starting character
or length(substring (email_address from '%[@.-_]')) > 0   -- Valid but cannot be ending character
or email_address not like '%@%.%'   -- Must contain at least one @ and one .
or email_address like '%..%'        -- Cannot have two periods in a row
or email_address like '%@%@%'       -- Cannot have two @ anywhere
or email_address like '%.@%' or email_address like '%@.%' -- Cant have @ and . next to each other
or email_address like '%.cm' or email_address like '%.co' -- Unlikely. Probably typos 
or email_address like '%.or' or email_address like '%.ne' -- Missing last letter
;
Run Code Online (Sandbox Code Playgroud)