Если на этапе заполнения базы данных разработчики не предусмотрели механизма предварительной проверки правильности e-mail, то полезной будет следующая функция. Она возвращает 1, если адрес электронной почты корректен, и код ошибки в противном случае:
CREATE OR REPLACE FUNCTION EMAIL_CHECK (email varchar2)
--проверяет адрес эл. почты 1 - else - not ok
/********************************************/
--КОДЫ ОШИБОК
--0 Пустой email
--99 Нет символа @ или не заполнено имя пользователя или пароль
--100 Введённый email содержит пробелы в имени пользователя.
--101 Точка (.), в имени пользователя не может быть первым символом.
--102 Минус (-), в имени пользователя не может быть первым символом.
--103 Подчёркивание (_), в имени пользователя не может быть первым символом.
--104 Введённый email содержит недопустимые символы в имени пользователя
--105 Введённый email содержит пробелы в домене.
--106 Домен должен содержать хотя бы одну точку (.).
--107 Точка (.), в домене не может быть первым или последним символом.
--108 Введённый email содержит недопустимые символы в домене
--109 Введённый email содержит недопустимые символы в суффиксе домена (то, что написано после последней точки)
/********************************************/
RETURN INT
IS
R INT:= 1;
username varchar(200);
domain varchar(200);
msg varchar(255);
temp_str varchar(200);
len int;
BEGIN
if ltrim(rtrim(email)) is not null then
username:=lower(substr(email,1,instr(email,'@')-1));
domain:=lower(substr(email,instr(email,'@')+1,length(email)-instr(email,'@')+1));
-- проверка @ и длины имени пользователя и домена
if length(username)=0 or length(domain)=0 then
R := 99;
end if;
-- проверка правильности имени пользователя
if instr(username,' ')!=0 then
R := 100;
end if;
if substr(username,1,1)='.' then
R := 101;
end if;
if substr(username,1,1)='-' then
R := 102;
end if;
if substr(username,1,1)='_' then
R := 103;
end if;
temp_str:=REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(username,'a',''),'b',''),'c',''),'d',''),'e',''),'f',''),'g',''),'h',''),'i',''),'j',''),'k',''),'l',''),'m',''),'n',''),'o',''),'p',''),'q',''),'r',''),'s',''),'t',''),'u',''),'v',''),'w',''),'x',''),'y',''),'z',''),'.',''),'_',''),'-',''),'0',''),'1',''),'2',''),'3',''),'4',''),'5',''),'6',''),'7',''),'8',''),'9','');
if length(temp_str)<>0 then
R := 104;
end if;
-- проверка правильности домена
if instr(domain,' ')!=0 then
R := 105;
end if;
if instr(domain,'.')=0 then
R := 106;
end if;
if substr(domain,1,1)='.' or substr(domain,length(domain),1)='.' then
R := 107;
end if;
temp_str:=REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(domain,'a',''),'b',''),'c',''),'d',''),'e',''),'f',''),'g',''),'h',''),'i',''),'j',''),'k',''),'l',''),'m',''),'n',''),'o',''),'p',''),'q',''),'r',''),'s',''),'t',''),'u',''),'v',''),'w',''),'x',''),'y',''),'z',''),'.',''),'-',''),'0',''),'1',''),'2',''),'3',''),'4',''),'5',''),'6',''),'7',''),'8',''),'9','');
if length(temp_str)<>0 then
R := 108;
end if;
len:=length(domain);
while len>0 loop
if substr(domain,len,1)='.' then
exit;
end if;
len := len - 1;
end loop;
temp_str:=REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(substr(domain,len+1,length(domain)-len+1),'a',''),'b',''),'c',''),'d',''),'e',''),'f',''),'g',''),'h',''),'i',''),'j',''),'k',''),'l',''),'m',''),'n',''),'o',''),'p',''),'q',''),'r',''),'s',''),'t',''),'u',''),'v',''),'w',''),'x',''),'y',''),'z','');
if length(temp_str)<>0 then
R := 109;
end if;
else
R := 0;
end if;
RETURN(R);
END;
Пример использования функции
SELECT
EMAIL_CHECK('test@mail.ru')
FROM DUAL;
Источник: Реализация проверки правильности e-mail на SQL (Microsoft SQL Server)