通过SQL查询防止电子邮件地址中出现重复的“@”符号

时间:2014-12-03 16:16:54

标签: sql

无论如何(SQL中的查询)阻止多次输入' @'电子邮件地址中的符号                                   要么 无论如何(SQL中的查询)计算多少次' @'符号出现在电子邮件地址中?

2 个答案:

答案 0 :(得分:1)

在大多数数据库中,您将使用check约束:

create table . . . (
    . . .
    check (Email not like '%@%@%')

或者:

alter table . . .
    add constraint chk_NoDoubleAmpersands (Email not like '%@%@%'

如果数据库不支持检查约束,那么您将使用触发器。

答案 1 :(得分:0)

这很容易转换为存储过程。 [SQL-2008]

此查询将返回原始文本(电子邮件地址),并且还包含一个列,说明地址是否通过了' @'测试。此基本代码也可以修改为查看' @'之后的子字符串。至少有一个'。'在地址栏中。

DECLARE @S VARCHAR(50) = 'some_email@site.tld'
DECLARE @testValue AS VARCHAR(50) = @S
DECLARE @PF AS BIT = 'FALSE'
WHILE PatIndex('%[^@]%', @testvalue) > 0
    SET @testValue = Stuff(@testValue, PatIndex('%[^@]%', @testValue), 1, '')
SET @PF = CASE WHEN LEN(@testValue) = 1 THEN 'TRUE' ELSE 'FALSE' END
IF @PF = 'TRUE' SET @PF = CASE WHEN CHARINDEX('.',@S,CHARINDEX('@',@S)) > 0 THEN 'TRUE' ELSE 'FALSE' END
SELECT @S, @PF AS is_valid

如果存在多一个@,那么@testValue的长度将大于1. @PF var首先验证长度= 1否则所有其他值都失败。下一个@PF如果'是'它检查是否至少1'。存在于' @'之后的地址中表示有效的格式。这绝不会验证站点和tld(顶级域)是否存在。