【发布时间】:2009-01-08 08:46:24
【问题描述】:
我有这种情况,我需要物理数据库中的数据完整性。例如,我有一个变量@email_address VARCHAR(200),我想检查@email_address 的值是否为电子邮件格式。任何人都知道如何在 T-SQL 中检查格式?
非常感谢!
【问题讨论】:
标签: sql sql-server tsql email
我有这种情况,我需要物理数据库中的数据完整性。例如,我有一个变量@email_address VARCHAR(200),我想检查@email_address 的值是否为电子邮件格式。任何人都知道如何在 T-SQL 中检查格式?
非常感谢!
【问题讨论】:
标签: sql sql-server tsql email
我使用许多不同的错误和有效电子邮件地址测试了以下查询。它应该完成这项工作。
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% 支持),给你留下一个简单的后备,比如:
LIKE '%_@_%_.__%'
..或类似的。
我的感觉通常是你不应该在最后一刻这样做(当你插入数据库时)你应该在第一个机会和/或一个公共网关(实际上使SQL 插入请求),顺便说一下,您将拥有正则表达式的优势,甚至可能还有一个为您进行“真正”验证的库。
【讨论】: