我有这种情况,我需要物理数据库中的数据完整性.例如,我有一个变量,@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'
它会检查以下条件:
没有嵌入空间
'@'不能是电子邮件地址的第一个字符
'' 不能是电子邮件地址的最后一个字符
必须有'.' '@'之后的某个地方
允许使用'@'标志
域名最后应至少包含2个字符的扩展名
不能有像'.@'和'..'这样的模式
AFAIK没有好办法做到这一点.
电子邮件格式标准是如此复杂的解析器已知可以运行到数千行代码,但即使您使用更简单的形式,这将失败一些不起眼但有效的地址,您必须在没有正则表达式的情况下执行此操作T-SQL本身不支持(再次,我不是百分之百),让你有一些简单的回退,如:
LIKE '%_@_%_.__%'
..或类似的.
我的感觉通常是你不应该在最后可能的时刻这样做(当你插入数据库时)你应该在第一次机会和/或公共网关(实际进行SQL插入的控制器)时这样做请求),顺便说一句,你会有正则表达式的优势,甚至可能是一个为你做"真正"验证的库.