T-SQL:检查电子邮件格式

时间:2009-01-08 08:46:25

标签: sql sql-server tsql email

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

非常感谢!

4 个答案:

答案 0 :(得分:18)

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

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个字符的扩展名结尾
  • 不能有像'。@'和'..'
  • 这样的模式

答案 1 :(得分:8)

AFAIK没有好办法做到这一点。

电子邮件格式标准是如此复杂的解析器已知可以运行到数千行代码,但即使您使用更简单的形式,这将失败一些不起眼但有效的地址,您必须在没有常规的情况下执行此操作T-SQL本身不支持的表达式(再次,我不是100%),让你有一些简单的回退,如:

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

..或类似。

我的感觉通常是你不应该在最后一刻这样做(当你插入数据库时​​)你应该在第一次机会和/或公共网关(实际制造的控制器)时这样做顺便提一下,你可以获得正则表达式的优势,甚至可能是一个为你做“真正”验证的库。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

我担心在T-SQL中没有简单的方法。要验证RFC 2822允许的所有各种电子邮件地址,您需要使用正则表达式。

更多信息here

如果要简化范围,则需要定义范围。