Treinamentos Oracle - Nerv Informática

Format Mask para To_char



Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
  

Mensagempor alef em Seg, 04 Ago 2008 4:35 pm

Galera, da uma ajudinha ai, preciso fazer uma formatação que não esta nos padroes do to_char, seria por exemplo criar uma mascara que varia de cpf com os pontos de traços e ou na mesma coluna aparecer o cnjp com seus devidos pontos, traços e barras. eu tentei fazer esse exemplo aqui.

Código: Selecionar todos
select
    a.empresa,
    decode(nvl(a.cpf, a.cgc), a.cpf, to_char(a.cpf,00"."000"."000"-"00), to_char(a.cgc, 00"."000"."000"/"0000"-"00))  doc 
from
   tb_empresa a
where
   a.empresa is not null;


a estrutura é a seguinte
tb_pessoa
empresa varchar2(60),
cpf number(11),
cgc number(14)

mas a duvida acontece no to_char, se essa forma que eu usei esta correta.
alef
Localização: Patos de Minas - MG

Alexandre Matos
Patos de Minas - MG
Do interior de Minas para o resto do Mundo

Mensagempor Trevisolli em Seg, 04 Ago 2008 4:57 pm

Brother, beleza velho?

Cara, tem que ser resolvido via SQL mesmo?
Não tem como jogar num LOOP e tratar via PL/SQL?
Trevisolli
Localização: Araraquara - SP

Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Mensagempor alef em Seg, 04 Ago 2008 5:02 pm

na verdade eu precisei disso no forms, ai consegui fazer, mas seria interessante fazer isso via sql, não acha?

no forms eu fiz o select empresa, cpf, cgc into a,b,c from tb_empresa where rownum = 1

depois verifiquei qual dos duas variaveis tinha sido setada,

if cpf is null then
set_item_property( 'bloco.doc', FORMAT_MASK, '00"."000"."000"/"0000"-"00');
:bloco.doc := cgc;
else
set_item_property( 'bloco.doc', FORMAT_MASK, '00"."000"."000"-"00');
:bloco.doc := cpf;
end if;

e pronto, ai agora dependendo do valor ele coloca a mascara no campo doc.

mas no sql que faz ficar interessante.
desafios.
alef
Localização: Patos de Minas - MG

Alexandre Matos
Patos de Minas - MG
Do interior de Minas para o resto do Mundo

Mensagempor Trevisolli em Ter, 05 Ago 2008 8:12 am

Brother, beleza meu velho?
Segue abaixo aí.. acho q te serve.
Só seguir a mesma linha de raciocício do CPF pro teu CNPJ.
Código: Selecionar todos
-- 99977766655 = Teu campo da base
--               Se for de tamanho 11, é CPF, senão, CNPJ
SELECT  DECODE(LENGTH(99977766655),11, SUBSTR(99977766655,1,3)||'.'||
                                       SUBSTR(99977766655,4,3)||'.'||
                                       SUBSTR(99977766655,7,3)||'-'||
                                       SUBSTR(99977766655,10,2)   -- CPF
                                     ,0) docto -- Formatar CNPJ aqui ...
FROM dual                                      ;

Qualquer coisa, manda pra gente.
Trevisolli
Localização: Araraquara - SP

Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Mensagempor alef em Ter, 05 Ago 2008 10:28 am

Fiz assim
Código: Selecionar todos
SELECT  DECODE(LENGTH(nvl(cpf,cgc)),11, SUBSTR(nvl(cpf,cgc),0,3)||'.'||
                                       SUBSTR(nvl(cpf,cgc),3,3)||'.'||
                                       SUBSTR(nvl(cpf,cgc),6,3)||'-'||
                                       SUBSTR(nvl(cpf,cgc),9,2)   -- CPF
                                     , SUBSTR(nvl(cpf,cgc),0,3)||'.'|| -- CNPJ
                                       SUBSTR(nvl(cpf,cgc),3,3)||'.'||
                                       SUBSTR(nvl(cpf,cgc),6,3)||'/'||
                                       SUBSTR(nvl(cpf,cgc),9,4)||'-'||
                                       SUBSTR(nvl(cpf,cgc),13)) docto
FROM tb_empresa


ai deu certo!!!
^^

vlw Trevis
alef
Localização: Patos de Minas - MG

Alexandre Matos
Patos de Minas - MG
Do interior de Minas para o resto do Mundo

Mensagempor alef em Qui, 07 Ago 2008 4:13 pm

tava bom d+ pra ser verdade....

enquanto não botei o sql a prova, que não econtrei as falhas, hehehehehe


o oracle não armazena 0 a esquerda. então se um cpf por exemplo 012345678 90 e dar um length na coluna, esse valor vai ter apenas 10 bytes, ou seja? nesse padrão de mascara ele não será nem um cpf, nem um cnpj, e outro detalhe, se um cnpj tambem começar por 0 e tiver 0 nos tres primeiros digitos, o cnpj vira um cpf.



:(


agora ta esquentando o desafio.
alef
Localização: Patos de Minas - MG

Alexandre Matos
Patos de Minas - MG
Do interior de Minas para o resto do Mundo

Mensagempor jucruzjc em Ter, 12 Ago 2008 4:09 pm

Oi!

Não sei se entendi o que você disse... mas e se você usar o LPAD/ RPAD nos campos determinando o tamanho e o "0".... não funciona? :?:




Até mais :wink:

--
Juliana Cr. Cruz
jucruzjc
Localização: Santa Bárbaba d'Oeste

Mensagempor jucruzjc em Ter, 12 Ago 2008 4:14 pm

oi dinovu!

Achei algo interessante aqui....


Código: Selecionar todos
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;



Fica de dica galera!!! :wink:


bjão

Juliana Cr. Cruz
jucruzjc
Localização: Santa Bárbaba d'Oeste

Mensagempor alef em Qui, 14 Ago 2008 1:19 pm

grande Juliana!!!!

Parabens!!! otima solução para esse desafio,

Depois vou colocar outro aqui.

na verdade esses desafios, são mais duvidas de uma mente ociosa. heheheheh


muito obrigado e PARABENS mais uma vez!!!

:-o
alef
Localização: Patos de Minas - MG

Alexandre Matos
Patos de Minas - MG
Do interior de Minas para o resto do Mundo

Mensagempor alef em Qui, 14 Ago 2008 1:51 pm

agora para trazer esse select em um LOV, onde traz a o nome e o documento(cpf/cnpj).

Código: Selecionar todos
SELECT
nvl(Decode(cpf, NULL,NULL, Translate(To_Char(cpf/100
                     ,'000,000,000.00')
                     ,',.'
                     ,'.-')) ,
                     
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'))||'-')) ) doc, empresa
FROM tbempresa
alef
Localização: Patos de Minas - MG

Alexandre Matos
Patos de Minas - MG
Do interior de Minas para o resto do Mundo


Voltar para SQL

Quem está online

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