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

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

谢谢!


SELECT * FROM people WHERE email NOT LIKE '%_@__%.__%'

任何更复杂的事情都可能会导致错误的否定,并且运行得更慢。

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

编辑:相关问题

  • 我前段时间回答了类似的问题:TSQL电子邮件验证(无正则表达式)
  • T-SQL:检查电子邮件格式
  • 正则表达式很难识别电子邮件地址?
  • 许多其他堆栈溢出问题

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

    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 
    

    然后你可以使用这个函数找到所有的行:

    SELECT * FROM users WHERE dbo.vaValidEmail(email) = 0
    

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

    SELECT * FROM users WHERE email NOT LIKE '_%@__%.__%'
    

    资源


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

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

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

    它可以颠倒,做你想这样做:

    SELECT email
    FROM People
    WHERE NOT (email LIKE '%_@__%.__%' 
        AND PATINDEX('%[^a-z,0-9,@,.,_]%', REPLACE(email, '-', 'a')) = 0)
    
    链接地址: http://www.djcxy.com/p/92749.html

    上一篇: Sql script to find invalid email addresses

    下一篇: Email validator regex