我有这种场景,我需要物理数据库中的数据完整性。例如,我有一个变量@email_address VARCHAR(200)
,我想检查@email_address
的值是否为电子邮件格式。任何人有任何想法如何检查T-SQL格式?T-SQL:检查电子邮件格式
非常感谢!
我有这种场景,我需要物理数据库中的数据完整性。例如,我有一个变量@email_address VARCHAR(200)
,我想检查@email_address
的值是否为电子邮件格式。任何人有任何想法如何检查T-SQL格式?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 protected]',@email_address) = 0 AND CHARINDEX('..',@email_address) = 0)
)
print 'valid email address'
ELSE
print 'not valid'
它会检查这些条件:
谢谢!我对你发布的条件没有一个想法。感谢你的回答! – jerbersoft 2009-01-09 00:12:57
@splattne ...这个函数在mssql 2008上不起作用。它是在mssql 2012上工作的很好的函数,但在2008上不是这样。 – IBM 2016-05-03 18:36:34
AFAIK没有好办法做到这一点。
电子邮件格式标准是如此复杂的解析器已知运行到数千行代码,但即使您使用的是一个更简单的表单,它会失败一些晦涩但有效的地址,这本身不T-SQL支持正则表达式(再次,我不是100%),让你有somethign像一个简单的回退:
LIKE '%[email protected]_%_.__%'
..或相似。
我的感觉通常是,你不应该在最后时刻这样做(尽管插入到数据库中),你应该在第一个机会和/或公共网关(控制器实际上使SQL插入请求),顺便说一句,你会有正则表达式的优势,甚至可能是一个库,它会为你“进行真正的”验证。
可能重复的[Sql脚本来查找无效的电子邮件地址](http://stackoverflow.com/questions/801166/sql-script-to-find-invalid-email-addresses) – Neolisk 2015-01-28 15:27:03