SQL

Validando emails com o SQL Server

Aprenda a validar e-mails utilizando o SQL Server

13/10/2019SQL

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

Calculando dias úteis com SQL Server
01/03/2020SQL

Calculando dias úteis com SQL Server

Veja como calcular os dias úteis de acordo com uma determinada data

Saiba mais...
Localizando tabela por data de criação com SQL Server ou MySQL
08/08/2016SQL

Localizando tabela por data de criação com SQL Server ou MySQL

Uma dica rápida para quem trabalha com SQL Server ou MySQL e deseja localizar tabelas por data de criação

Saiba mais...

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

MySQL - Referência Rápida

 

SQL Server - Referência Rápida

 

SQL vs Mongo