[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
Responder
izaiascatelli
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 16
Registrado em: Ter, 17 Mai 2005 4:24 pm
Localização: curitiba pr

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

Selecionar tudo

--- 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;
hyebahi
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Seg, 25 Mai 2009 9:05 pm
Localização: SC

Uma alternativa utilizando expressão regular

Selecionar tudo

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))
Responder
  • Informação