MySQL/SQL Máscara para CEP, RG, CPF, CNPJ, Telefone entre outros dados
- maio 23, 2017
- Programação
- 5 comentários
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.
## 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 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 fevereiro 28, 2020
Excelente solução. E se eu tiver no mesmo campo o celular e o fixo?
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.
Postar um comentário