MySQL/SQL Máscara para CEP, RG, CPF, CNPJ, Telefone entre outros dados

Escrevi uma função SQL para aplicar máscara em campos/valores como CEP, RG, CPF, CNPJ, Telefone, Celular, Data, Hora ou qualquer outro formato seguindo a estrutura da função. Também funciona com Oracle, MySQL, SQL Server e PostgreSQL.

Print da tela MySQL Workbench
Print da tela MySQL Workbench (Imagem: rafaelmoraesweb)
## Apagando a função se já existe
DROP FUNCTION IF EXISTS MASK;

## Criando a função
DELIMITER //
CREATE FUNCTION MASK(val VARCHAR(100), mask VARCHAR(100)) RETURNS VARCHAR(100) DETERMINISTIC
BEGIN
 DECLARE maskared VARCHAR(100) DEFAULT "";
 DECLARE k INT DEFAULT 0;
 DECLARE i INT DEFAULT 0;
 WHILE i < CHAR_LENGTH(mask) DO
  SET i = i + 1;
  IF SUBSTRING(mask, i, 1) = '#' THEN
   IF k < CHAR_LENGTH(val) THEN
    SET k = k+1;
    SET maskared = CONCAT(maskared, SUBSTRING(val, k, 1));
   END IF;
  ELSE
   IF i < CHAR_LENGTH(mask) THEN
    SET maskared = CONCAT(maskared, SUBSTRING(mask, i, 1));
            END IF;
        END IF;
 END WHILE;
 RETURN maskared;
END;
//
DELIMITER ;

Testando a função de mascara em SQL

Depois de criada a função, podemos executar a seguinte query para testa-la.

## Testando a função
SELECT  MASK("12345123", "#####-###") AS cep,
   MASK("121231231", "##.###.###-#") AS rg,
   MASK("1212312312", "##.###.###-##") AS cpf,
   MASK("12123123123412", "##.###.###/####-##") AS cnpj,
   MASK("1212341234", "(##) ####-####") AS telefone,
   MASK("12123451234", "(##) #####-####") AS celular
FROM dual;

Deixe nos comentários o que achou e acompanhe o site para ficar por dentro das atualizações.

Tags: Mascara para MySQL / SQL, Mascara para qualquer coisa, Formatar CEP, RG, CNPJ, CPF no MySQL, Pontuanção RG e CPF com SQL.

5 comentários Postar um comentário

Adriano Moura
Adriano Moura agosto 26, 2019

Muito bom, me salvou aqui. seria legal fazer esta mesma função pra outros bancos como Sqlite, PostgreSQL, Oracle e etc.

prezadoline
prezadoline fevereiro 28, 2020

Excelente solução. E se eu tiver no mesmo campo o celular e o fixo?

Flávio
Flávio março 27, 2020

Faça uma condicional IF para verificar a quantidade de números e aplique a máscara de acordo. Se você estiver usando MySQL faça isso com a função CHARACTER_LENGTH() ou CHAR_LENGTH(). Essa função retorna o número de caracteres.

Unknown
Unknown junho 10, 2021

Antigo mas ainda sim muito funcional.. Parabens

Postar um comentário

Escreva apenas o que for referente e relevante ao artigo.
Digite seu comentário...

Mais postagens