create function getemail(@m varchar(8000)) returns int as begin declare @mm varchar(8000),@y varchar(8000),@d varchar(8000) declare @i int if @m is null return 2 select @mm = rtrim(ltrim(@m)) select @i = charindex('@',@mm) if @i < 2 then return 2 select @y=right(@mm,@i-1),@d = left(@mm,len(@mm)-@i) if patindex('[0-9a-zA-Z]',@y)<>1 then return 2 if patindex('%^[0-9a-zA-Z.-_]%',@y)>0 then return 2 if patindex('[0-9a-zA-Z]',@d)<>1 then return 2 if patindex('%^[0-9a-zA-Z.-]%',@d)>0 then return 2 if (select count(*) from tb where rtrim(ltrim(email))=@mm)>=1 return 1 return 0 end go insert email select * from tb where dbo.getemail(email)=0 insert error select * from tb where dbo.getemail(email)=2 insert dup select * from tb where dbo.getemail(email)=1 insert email select distinct * from dup
2.将合法的而且有重复的写入t_duplicate表,
3.将错误的邮件地址写入t_error表,
------------
不知道你的数据库版本是否可以使用正则来出来啦?
其它思路,
1.先过滤掉不是形如[email protected],[email protected],[email protected]之类的,
2.在1的基础上在根据你列出来的判断条件判断,
再分类存到各个表中。
在存储过程里进行正则验证似乎不是sql的专长。
看看高手们怎么说。
returns int
as
begin
declare @mm varchar(8000),@y varchar(8000),@d varchar(8000)
declare @i int
if @m is null return 2
select @mm = rtrim(ltrim(@m))
select @i = charindex('@',@mm)
if @i < 2 then return 2
select @y=right(@mm,@i-1),@d = left(@mm,len(@mm)-@i)
if patindex('[0-9a-zA-Z]',@y)<>1 then return 2
if patindex('%^[0-9a-zA-Z.-_]%',@y)>0 then return 2
if patindex('[0-9a-zA-Z]',@d)<>1 then return 2
if patindex('%^[0-9a-zA-Z.-]%',@d)>0 then return 2
if (select count(*) from tb where rtrim(ltrim(email))=@mm)>=1 return 1
return 0
end
go
insert email select * from tb where dbo.getemail(email)=0
insert error select * from tb where dbo.getemail(email)=2
insert dup select * from tb where dbo.getemail(email)=1
insert email select distinct * from dup
SQL编程简洁的艺术
正式我要学习的
study
支持
study
支持
study
支持