我有这样的场景,我需要在物理数据库的数据完整性。 例如,我有一个变量@email_address VARCHAR(200)
我想检查是否值@email_address
是电子邮件格式。 任何人有任何想法如何在T-SQL查询的格式?
非常感谢!
我有这样的场景,我需要在物理数据库的数据完整性。 例如,我有一个变量@email_address VARCHAR(200)
我想检查是否值@email_address
是电子邮件格式。 任何人有任何想法如何在T-SQL查询的格式?
非常感谢!
我测试下面的查询与许多不同的错误的和有效的电子邮件地址。 它应该做的工作。
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'
它会检查这些条件:
AFAIK没有做到这一点没有什么好办法。
电子邮件格式标准是如此复杂的解析器已经知道运行到上千行的代码,但即使你使用一个简单的形式,它会失败一些模糊的,但有效地址,你必须做没有的正则表达式本身不被T-SQL(再次,我不是100%)的支持,让你有somethign像一个简单的回退:
LIKE '%_@_%_.__%'
..或相似。
我的感觉通常是你shouln't在最后一刻,虽然做这个(当你插入一个DB),你应该在第一次有机会和/或公共网关(控制器实际上使SQL插入那样做请求),顺便在那里你将有正则表达式的优势,甚至可能是其是否“真实”验证了您的图书馆。
如果您使用SQL 2005或2008年,你可能想看看在写作CLR存储proceudues和使用.NET正则表达式引擎这样 。 如果您使用SQL 2000或更早的版本,你可以使用VBScript脚本引擎的正则表达式喜欢的部份 。 你也可以使用扩展存储过程是这样
有没有简单的方法来做到这一点的T-SQL,我很害怕。 为了验证所允许的电子邮件地址的所有品种RFC 2822 ,您将需要使用正则表达式。
更多信息这里 。
您需要定义范围,如果你想简化它。