É isso mesmo, isso te dá o tempo em segundos, só falta agora formatar 
para hora, que é o que minha função faz a partir daquela linha de cometário.
Atente para o uso do trunc para evitar arredondamentos no cálculo.

rei_do_delphi escreveu:
> Fala caro Roberto, tudo bom?
>
> hauhuaa, o Happy Hour a gente podia marcar mesmo, um harry hour para o
> pessoal do oracle_br, em Sampa, onde acredito que boa parte dos
> usuários deve ser, morar ou trabalhar. Olha como consegui resolver isso:
>
>       select hhmmss_out_acqr,hhmmss_inp_acqr,
>        
> abs((to_number(substr(to_char(hhmmss_out_acqr,'000000'),1,2)*3600)-
>         to_number(substr(to_char(hhmmss_inp_acqr,'000000'),1,2)*3600))+ 
>         (to_number(substr(to_char(hhmmss_out_acqr,'000000'),4,2)*60)-
>         to_number(substr(to_char(hhmmss_inp_acqr,'000000'),4,2)*60))+
>         (to_number(substr(to_char(hhmmss_out_acqr,'000000'),6,2))-
>         to_number(substr(to_char(hhmmss_inp_acqr,'000000'),6,2)))
>         )        as tempo,
>         --hhmmss_inp_acqr as tempo ,
>         fecha_tx from tabela1 
>     
>
> foi foda pensar nisso, mas consegui em casa ontem a noite. Abraço, e
> pode deixar, te pago uma cerveja no happy hour.
> --- Em oracle_br@yahoogrupos.com.br, Roberto Amorim <[EMAIL PROTECTED]> 
> escreveu
>   
>> Taí rei, de graça, 20 min pensando.
>> Na próxima paga a cerveja do happy hour
>> Não botei no padrão de nomeclatura aqui da empresa pois estava sem saco 
>> e com pressa para fazer logo, mas vc ajeita.
>>
>>
>> create or replace function fnsig_calc_hora_number(x in number, y in
>>     
> number)
>   
>>     return number is
>>     result      number;
>>     horax       number;
>>     minx        number;
>>     segx        number;
>>     horay       number;
>>     miny        number;
>>     segy        number;
>>     horan       number;
>>     minn        number;
>>     segn        number;
>>     total_seg_x number;
>>     total_seg_y number;
>>     total_seg   number;
>>     tot_horan   number;
>>     tot_min     number;
>> begin
>>     horax := round(x / 10000);
>>     minx  := round((x - (horax * 10000)) / 100);
>>     segx  := x - (horax * 10000) - (minx * 100);
>>
>>     horay := round(y / 10000);
>>     miny  := round((y - (horay * 10000)) / 100);
>>     segy  := y - (horay * 10000) - (miny * 100);
>>
>>     total_seg_x := (horax * 3600) + (minx * 60) + segx;
>>     total_seg_y := (horay * 3600) + (miny * 60) + segy;
>>
>>     --aqui você faz uma validação para caso x seja menor que y e o 
>> resultado fique negativo, o que seria errado
>>
>>     total_seg := total_seg_x - total_seg_y;
>>
>>     if total_seg < 3600 then
>>         horan     := 0;
>>         tot_horan := 0;
>>     else
>>         tot_horan := trunc(total_seg / 3600);
>>         horan     := tot_horan * 10000;
>>         tot_horan := tot_horan * 60 * 60;
>>     end if;
>>
>>     if total_seg < 60 then
>>         minn    := 0;
>>         tot_min := 0;
>>     else
>>         tot_min := trunc(((total_seg - tot_horan) / 60), 0);
>>         minn    := tot_min * 100;
>>         tot_min := tot_min * 60;
>>     end if;
>>     segn := total_seg - tot_horan - tot_min;
>>
>>     result := horan + minn + segn;
>>     return(result);
>> end fnsig_calc_hora_number;
>>
>> rei_do_delphi escreveu:
>>     
>>> Boa tarde a todos, tenho uma tabela que tem um campo que armazena a
>>> data de alguma coisa, em formato number. Ex: 193104 para 19 horas, 31
>>> minutos e 04 segundos. Precisamos subtrair esse campo de outro campo
>>> que também contém hora nesse mesmo forma e também em number. Gostaria
>>> de saber se há alguma maneira de fazer isso sem uso de pl/sql, isto é,
>>> apenas por funções do oracle, ja sei que não funciona:
>>>
>>> select to_date(campo,'hh24miss') from tabela 
>>>
>>> pois ele reclama que a hora tem que estar entre 0 e 23. 
>>>
>>> Alguém pode me dar alguma ajuda?
>>> Obrigado a todos e abraço.
>>>
>>>
>>>
>>>   
>>>       
>>>> Apostilas » Dicas e Exemplos » Funções » Mundo Oracle » Package »
>>>>         
> Procedure » Scripts » Tutoriais acesse:
> http://www.oraclebr.com.br/codigo/ListaCodigo.php 
>   
>>>>     
>>>>         
> --------------------------------------------------------------------------------------------------------------------------
>   
>>>   
>>>       
>>>> Atenção! As mensagens do grupo ORACLE_BR são de acesso público e
>>>>         
> de inteira responsabilidade de seus remetentes.
>   
>>>>     
>>>>         
>>> Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
>>>
>>>       
> --------------------------------------------------------------------------------------------------------------------------
>   
>>>   
>>>       
>>>> O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE:
>>>>         
> http://www.oraclebr.com.br/  
>   
>>>>     
>>>>         
> ------------------------------------------------------------------------------------------------------------------------
>  
>   
>>> Links do Yahoo! Grupos
>>>
>>>  
>>>
>>>
>>>
>>>
>>>       
>
>
>
>
>   
>> Apostilas » Dicas e Exemplos » Funções » Mundo Oracle » Package » Procedure 
>> » Scripts » Tutoriais acesse: 
>> http://www.oraclebr.com.br/codigo/ListaCodigo.php 
>>     
> --------------------------------------------------------------------------------------------------------------------------
>   
>> Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira 
>> responsabilidade de seus remetentes.
>>     
> Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
> --------------------------------------------------------------------------------------------------------------------------
>   
>> O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: 
>> http://www.oraclebr.com.br/  
>>     
> ------------------------------------------------------------------------------------------------------------------------
>   
> Links do Yahoo! Grupos
>
>  
>
>
>
>   

Responder a