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

Convertendo linhas em colunas usando MySQL
13/09/2020SQL

Convertendo linhas em colunas usando MySQL

Aprenda a transformar linhas em colunas no MySQL

Saiba mais...
Paginação de resultados com SQL
10/01/2021SQL

Paginação de resultados com SQL

Como paginar resultados usando bancos de dados MySQL e SQL Server

Saiba mais...
Como agrupar vários registros em uma única coluna com SQL
26/06/2022SQL

Como agrupar vários registros em uma única coluna com SQL

Veja como agrupar várias linhas em uma única coluna com SQL

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