[Dica] Mascara de CPF e CNPJ

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
  

Mensagemem Sex, 16 Fev 2007 10:19 am

Só a título de curiosidade, talvez com pouco efeito prático, apresento uma forma de incluir máscara nos campos de cpf e cnpj sem usar o substr().
Gerado o Oracle 10
Código: Selecionar todos
--- Criar máscara
SELECT
Decode(cpf, NULL,NULL,
Translate(To_Char(cpf/100
                        ,'000,000,000.00')
                 ,',.'
                 ,'.-')) cpf_com_mascara,
Decode(cnpj,NULL,NULL,
       REPLACE(REPLACE(REPLACE(To_Char(LPad(REPLACE(cnpj,' ')
                                           ,14
                                          ,'0')
                                      ,'00,000,000,0000,00')
                               ,','
                              ,'.')
                       ,' ')
              ,'.'||Trim(To_Char(Trunc(Mod(LPad(cnpj
                                               ,14
                                               ,'0')
                                      ,1000000)/100)
                                ,'0000'))||'.'
              ,'/'||Trim(To_Char(Trunc(Mod(LPad(cnpj
                                               ,14
                                               ,'0')
                                       ,1000000)/100)
                                ,'0000'))||'-')) cnpj_com_mascara
FROM (
  (SELECT '12345678912' cpf, '12345678000189' cnpj FROM dual))

-- Retirar a máscara
SELECT REPLACE(Translate('012.365.478-56','.-','  '),' ') FROM dual;
SELECT REPLACE(Translate('12.365.478/0001-56','./-','   '),' ') FROM dual;
izaiascatelli
Localização: curitiba pr

Mensagemem Ter, 15 Jun 2010 11:52 am

Uma alternativa utilizando expressão regular

Código: Selecionar todos
SELECT decode(cpf
             ,NULL
             ,NULL
             ,translate(to_char(cpf / 100, '000,000,000.00'), ',.', '.-')) cpf_com_mascara
       ,regexp_replace(cpf,'([0-9]{3})([0-9]{3})([0-9]{3})([0-9]{2})','\1.\2.\3-\4') cpf_com_mascara_regexp
  FROM ((SELECT '12345678912' cpf
               ,'12345678000189' cnpj
           FROM dual))
hyebahi
Localização: SC


  • Veja também
    Respostas
    ExibiÇões
    Última mensagem


      Voltar para PL/SQL

      Quem está online

      Usuários navegando neste fórum: Nenhum usuário registrado e 8 visitantes

cron