
Você já se deparou com dados “crus” no banco, como um CNPJ sem pontos ou traços, e precisou formatá-los manualmente no sistema? Ou talvez tenha precisado tratar essa visualização direto em um SELECT ou PROCEDURE para exibir os dados já formatados para o cliente? 😬
Hoje vou te mostrar como formatar CNPJ, CPF e CEP diretamente no SQL Server, utilizando funções nativas como SUBSTRING, LEFT, RIGHT e STUFF. O processo é simples, limpo e extremamente útil — principalmente em procedures que geram relatórios, exibem dados em tela ou enviam mensagens automatizadas. Essa abordagem evita o retrabalho de formatar os dados no backend, o que pode gerar processamento desnecessário e quebrar a responsabilidade das camadas do sistema.
🧩 Por que formatar direto no SQL?
É comum e até recomendado que os dados armazenados no banco venham sem formatação, contendo apenas os números. Isso facilita operações, buscas e integrações. Mas, quando precisamos exibir os dados de forma legível — como em logs, templates ou mensagens automáticas — ter a formatação no SQL pode ser muito útil.
✅ Formatando CNPJ: 12.345.678/0001-95
SELECT
-- Adiciona o primeiro ponto após os 2 primeiros dígitos
STUFF(
-- Adiciona o segundo ponto após os 5 primeiros dígitos (já contando o ponto anterior)
STUFF(
-- Adiciona a barra após os 8 primeiros dígitos (contando os dois pontos anteriores)
STUFF(
-- Adiciona o traço após os 12 primeiros dígitos (contando os separadores)
STUFF('12345678000195', 3, 0, '.'), -- Resultado: 12.345678000195
7, 0, '.'), -- Resultado: 12.345.678000195
11, 0, '/'), -- Resultado: 12.345.678/000195
16, 0, '-') AS CNPJ_Formatado -- Resultado final: 12.345.678/0001-95
✅ Formatando CPF: <em>123.456.789-01</em>
SELECT
-- Adiciona o primeiro ponto após os 3 primeiros dígitos
STUFF(
-- Adiciona o segundo ponto após os 6 primeiros dígitos (já contando o primeiro ponto)
STUFF(
-- Adiciona o traço após os 9 primeiros dígitos (já contando os pontos)
STUFF('12345678901', 4, 0, '.'), -- Resultado: 123.45678901
8, 0, '.'), -- Resultado: 123.456.78901
12, 0, '-') AS CPF_Formatado -- Resultado final: 123.456.789-01
✅ Formatando CEP: 12345-678
SELECT
-- Adiciona o traço após os 5 primeiros dígitos
STUFF('12345678', 6, 0, '-') AS CEP_Formatado
-- Resultado final: 12345-678
💡 Dica: Centralize a lógica em uma Procedure
Centralizar a formatação em uma procedure ajuda a organizar o código, evitar repetição e facilita a manutenção. Sempre que precisar dessas formatações, basta chamar a procedure.
CREATE PROCEDURE dbo.SP_EXIBE_CLIENTE
@CNPJ VARCHAR(14),
@CPF VARCHAR(11),
@CEP VARCHAR(8)
AS
BEGIN
SET NOCOUNT ON;
CREATE TABLE #CNPJ_Formatado (CNPJ VARCHAR(18));
INSERT INTO #CNPJ_Formatado (CNPJ)
SELECT STUFF(STUFF(STUFF(STUFF(@CNPJ, 3, 0, '.'), 7, 0, '.'), 11, 0, '/'), 16, 0, '-');
CREATE TABLE #CPF_Formatado (CPF VARCHAR(14));
INSERT INTO #CPF_Formatado (CPF)
SELECT STUFF(STUFF(STUFF(@CPF, 4, 0, '.'), 8, 0, '.'), 12, 0, '-');
CREATE TABLE #CEP_Formatado (CEP VARCHAR(9));
INSERT INTO #CEP_Formatado (CEP)
SELECT STUFF(@CEP, 6, 0, '-');
SELECT
C.CNPJ,
P.CPF,
E.CEP
FROM #CNPJ_Formatado C
CROSS JOIN #CPF_Formatado P
CROSS JOIN #CEP_Formatado E;
DROP TABLE #CNPJ_Formatado;
DROP TABLE #CPF_Formatado;
DROP TABLE #CEP_Formatado;
END
✅ Como usar a Procedure:
EXEC dbo.sp_Formatar_Documentos
@CNPJ = '12345678000195',
@CPF = '12345678901',
@CEP = '12345678'
🧾 Resultado esperado:
| CNPJ | CPF | CEP |
|---|---|---|
| 12.345.678/0001-95 | 123.456.789-01 | 12345-678 |
⚠ Atenção!
Essas formatações presumem que os dados estão completos e sem formatação. Caso os campos venham com caracteres inválidos ou estejam incompletos, é importante validar previamente usando LEN, ISNUMERIC, ou TRY_CAST/TRY_CONVERT (se estiver usando SQL Server 2012+).
✅ Conclusão
Saber formatar diretamente no SQL Server pode acelerar tarefas de testes, visualização de dados, geração de relatórios e mensagens automáticas. Se quiser ir além, você pode transformar essas lógicas em funções reutilizáveis para aplicar sempre que necessário.
Curtiu a dica? Já precisou fazer esse tipo de formatação no SQL alguma vez? Comenta aí como você resolveu — ou que tipo de gambiarra já fez com CNPJ e CPF! 😄