【问题标题】:T-SQL: checking for email formatT-SQL:检查电子邮件格式
【发布时间】:2009-01-08 08:46:24
【问题描述】:

我有这种情况,我需要物理数据库中的数据完整性。例如,我有一个变量@email_address VARCHAR(200),我想检查@email_address 的值是否为电子邮件格式。任何人都知道如何在 T-SQL 中检查格式?

非常感谢!

【问题讨论】:

标签: sql sql-server tsql email


【解决方案1】:

我使用许多不同的错误和有效电子邮件地址测试了以下查询。它应该完成这项工作。

IF (
     CHARINDEX(' ',LTRIM(RTRIM(@email_address))) = 0 
AND  LEFT(LTRIM(@email_address),1) <> '@' 
AND  RIGHT(RTRIM(@email_address),1) <> '.' 
AND  CHARINDEX('.',@email_address ,CHARINDEX('@',@email_address)) - CHARINDEX('@',@email_address ) > 1 
AND  LEN(LTRIM(RTRIM(@email_address ))) - LEN(REPLACE(LTRIM(RTRIM(@email_address)),'@','')) = 1 
AND  CHARINDEX('.',REVERSE(LTRIM(RTRIM(@email_address)))) >= 3 
AND  (CHARINDEX('.@',@email_address ) = 0 AND CHARINDEX('..',@email_address ) = 0)
)
   print 'valid email address'
ELSE
   print 'not valid'

它检查这些条件:

  • 没有嵌入空格
  • “@”不能是电子邮件地址的第一个字符
  • '.'不能是电子邮件地址的最后一个字符
  • 必须有一个'.'在“@”之后的某处
  • 允许使用“@”符号
  • 域名应以至少 2 个字符扩展名结尾
  • 不能有像“.@”和“..”这样的模式

【讨论】:

  • 谢谢!我不知道您发布的条件。谢谢你的回答!
  • @splattne ...此功能在 mssql 2008 上不起作用。在 mssql 2012 上工作但在 2008 上不起作用的功能很棒
【解决方案2】:

AFAIK 没有好的方法可以做到这一点。

电子邮件格式标准是如此复杂,众所周知,解析器会运行数千行代码,但即使您要使用更简单的格式,这会使一些晦涩但有效的地址失败,您也必须在没有常规的情况下这样做T-SQL 本身不支持的表达式(同样,我不是 100% 支持),给你留下一个简单的后备,比如:

LIKE '%_@_%_.__%'

..或类似的。

我的感觉通常是你不应该在最后一刻这样做(当你插入数据库时​​)你应该在第一个机会和/或一个公共网关(实际上使SQL 插入请求),顺便说一下,您将拥有正则表达式的优势,甚至可能还有一个为您进行“真正”验证的库。

【讨论】:

  • 基本验证可以这样做。
【解决方案3】:

如果您使用 SQL 2005 或 2008,您可能希望了解编写 CLR 存储过程并使用 .NET 正则表达式引擎like this。如果您使用的是 SQL 2000 或更早版本,则可以使用 VBScript 脚本引擎的正则表达式 like ths。您还可以使用扩展存储过程like this

【讨论】:

    【解决方案4】:

    恐怕在 T-SQL 中没有简单的方法可以做到这一点。要验证RFC 2822 允许的所有电子邮件地址类型,您需要使用正则表达式。

    更多信息here

    如果你想简化它,你需要定义你的范围。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-14
      • 1970-01-01
      • 2016-07-23
      • 2015-03-17
      • 1970-01-01
      • 2020-04-20
      • 2017-06-21
      相关资源
      最近更新 更多