Os CPFs e CNPJs em seu sistema estão cadastrados todos sem pontos, como é bastante comum. Mas agora você precisa trazê-los do banco já com a pontuação correta. Como fazer isso?
Utilizando a função SUBSTR do PostgreSQL, podemos separar um String (Varchar, por exemplo) em várias partes e depois concatenar com a pontuação desejada. Lembre-se que o campo deve estar como String. Se estiver como inteiro, você vai ter que converter utilizando o CAST. Vamos aos exemplos:
CPF
select substr(cpf, 1, 3) || '.' || substr(cpf, 4, 3) || '.' || substr(cpf, 7, 3) || '-' || substr(cpf, 10) as cpf from (select cast('93746041597' as varchar) as cpf)a
CNPJ
select substr(cnpj, 1, 2) || '.' || SUBSTR(cnpj, 3, 3) || '.' || substr(cnpj, 6, 3) || '/' || SUBSTR(cnpj, 9, 4) || '-' || substr(cnpj, 13) AS cnpj from (select cast('99325358000151' as varchar) as cnpj)a
Fonte: http://flaviosilveira.com/2009/tratando-cpf-cnpj-primeiro-nome-e-data-pelo-sql-postgre/
fevereiro 12th, 2014 on 15:07
gostaria de saber como faco pra ter pontuacao no meu cpf.
março 28th, 2015 on 16:09
Muito bom camarada. Sucesso
novembro 10th, 2015 on 16:29
Genial!
outubro 17th, 2016 on 17:12
Completa com zeros a esquerda e coloca a mascara, simples assim:
— considerando que o cpf seja varchar
replace(to_char(cpf::bigint, ‘000:000:000-00’), ‘:’, ‘.’)
— considerando que o cnpj seja varchar
replace(to_char(cnpj::bigint, ’00:000:000:0000-00′), ‘:’, ‘.’)
janeiro 3rd, 2022 on 10:30
Bom dia,
Fiz um teste e pode-se usar tb o CASE, WHEN, THEN com uma REGEX para cada tipo.
Exemplo:
SELECT
e.razao_social,
CASE
WHEN LENGTH(c.cpf_cnpj) = 11
THEN regexp_replace(c.cpf_cnpj, '^([0-9]{3})([0-9]{3})([0-9]{3})([0-9]{2})$', '\1.\2.\3-\4')
WHEN LENGTH(c.cpf_cnpj) = 14
THEN regexp_replace(c.cpf_cnpj, '^([0-9]{2})([0-9]{3})([0-9]{3})([0-9]{4})([0-9]{2})$', '\1.\2.\3/\4-\5')
END
abril 14th, 2022 on 21:53
sensacional, obrigado por compartilhar!