无论如何(SQL中的查询)阻止多次输入' @'电子邮件地址中的符号 要么 无论如何(SQL中的查询)计算多少次' @'符号出现在电子邮件地址中?
答案 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(顶级域)是否存在。