É 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 > > > > > >