我有这种情况需要物理数据库中的数据完整性。例如,我有一个@email_address VARCHAR(200)
变量,我想检查@email_address
的值是否为电子邮件格式。任何人都知道如何在T-SQL中检查格式?
非常感谢!
答案 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'
检查这些条件:
答案 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)