Validando emails com o SQL Server

Validando emails com o SQL Server

A validação de e-mails é algo que deve ser feito do lado da aplicação, mas, podemos ter casos onde recebemos um banco de dados que tem e-mails inválidos. Vamos ver neste artigo como fazer a validação de e-mails usando SQL Server.

Como fazer a limpeza de dados?

A primeira coisa a fazer é identificar quais seriam os e-mails incorretos. Vamos criar uma query, mas, precisamos definir certas regras. Um e-mail correto é aquele que atende as seguintes condições:

1 - Não possui espaços em branco

2 - O "@" não é o primeiro caractere.

3 - O "." não é o último caractere.

4 - Deve existir um "." depois da "@".

5 - Apenas deve existir uma "@" por e-mail

6 - O nome de domínio deve ter pelo menos 2 caracteres, e finalmente

7 - Não devem existir padrões como ".@" e ".."

Para montar a nossa query, vamos combinar as seguintes funções:

CHARINDEX - Localiza a posição de um determinado caractere.

LTRIM - Apaga espaços em branco no começo.

RTRIM - Apaga espaços em branco no final.

LEFT - Seleciona uma determina quantidade da caracteres a partir da esquerda.

RIGHT - Seleciona uma determina quantidade da caracteres a partir da direita.

LEN - Conta a quantidade de caracteres.

REPLACE - Substitui um determinado caractere.

REVERSE - Inverte os caracteres.

A nossa query para selecionar e-mails inválidos vai ficar da seguinte forma:

SELECT * 

FROM minha_tabela

WHERE NOT

(

CHARINDEX(' ',LTRIM(RTRIM([Email]))) = 0  --(1)

AND  LEFT(LTRIM([Email]),1) <> '@'  --(2)

AND  RIGHT(RTRIM([Email]),1) <> '.'  --(3)

AND  CHARINDEX('.',[Email],CHARINDEX('@',[Email])) - CHARINDEX('@',[Email]) > 1  -- (4)

AND  LEN(LTRIM(RTRIM([Email]))) - LEN(REPLACE(LTRIM(RTRIM([Email])),'@','')) = 1  -- (5)

AND  CHARINDEX('.',REVERSE(LTRIM(RTRIM([Email])))) >= 3  -- (6)

AND  (CHARINDEX('.@',[Email]) = 0 AND CHARINDEX('..',[Email]) = 0) -- (7)

)

Os números entre parênteses se referem a lista numerada com as validações.

Você também pode inserir uma regra na sua tabela para bloquear a inserção de e-mails no formato inválido, caso não seja possível inserir esta regra no frontend de sua aplicação. Para inserir esta restrição (constraint), você pode fazer da seguinte forma:

 ALTER TABLE [dbo].[minha_tabela] 

WITH CHECK ADD 

CONSTRAINT [ValidarEmail] 

CHECK

(

CHARINDEX(' ',LTRIM(RTRIM([Email]))) = 0 -- (1)

AND LEFT(LTRIM([Email]),1) <> '@'  -- (2)

AND RIGHT(RTRIM([Email]),1) <> '.' -- (3)

AND CHARINDEX('.',[Email],CHARINDEX('@',[Email])) - CHARINDEX('@',[Email]) > 1 -- (4)

AND LEN(LTRIM(RTRIM([Email]))) - LEN(REPLACE(LTRIM(RTRIM([Email])),'@','')) = 1 -- (5)

AND CHARINDEX('.',REVERSE(LTRIM(RTRIM([Email])))) >= 3 -- (6)

AND (CHARINDEX('.@',[Email]) = 0 AND CHARINDEX('..',[Email]) = 0) -- (7)

)

GO

 

 

Outros conteudos que podem ser de seu interesse

Trabalhando com datas no Excel
25/07/2016SQL

Trabalhando com datas no Excel

Aprenda como controlar datas no Excel e fazer vários tipos de cálculos!

Saiba mais...
Como listar o tamanho das tabelas no SQL Server e no MySQL
25/09/2016SQL

Como listar o tamanho das tabelas no SQL Server e no MySQL

Veja como achar facilmente as tabelas que gastam mais espaço em seu banco de dados SQL Server ou MySQL!

Saiba mais...
Retornando dados do registro anterior ou seguinte com SQL
12/02/2023SQL

Retornando dados do registro anterior ou seguinte com SQL

Veja como trabalhar com as funções LAG e LEAD para retornar dados do registro anterior ou seguinte

Saiba mais...

Conteúdo sobre banco de dados sem complicação!


Warning: Cannot modify header information - headers already sent by (output started at /home/storage/f/7d/a9/dbins/public_html/blog/post.php:101) in /home/storage/f/7d/a9/dbins/public_html/blog/ga4_track.php on line 11