Re: [oracle_br] Re: Calculo Horas - Oracle 10g
Segue um exemplo usando TIMESTAMP e INTERVAL DECLARE V_DATA_INICIOTIMESTAMP; V_DATA_FINALTIMESTAMP; INTERVALO INTERVAL DAY TO SECOND; BEGIN V_DATA_INICIO := TO_TIMESTAMP('01/01/2014 01:00:00', 'dd/mm/ hh24:mi:ss'); V_DATA_FINAL := TO_TIMESTAMP('01/01/2014 05:00:00', 'dd/mm/ hh24:mi:ss'); INTERVALO := (V_DATA_FINAL - V_DATA_INICIO) DAY TO SECOND; DBMS_OUTPUT.PUT_LINE(INTERVALO); END; Em 31 de julho de 2014 14:21, Andre Santos andre.psantos...@gmail.com [oracle_br] escreveu: > > > Carlos > > Só complementando... se o datatype for TIMESTAMP (ao invés de DATE), a > diferença dos valores resulta em tipo INTERVAL (já num formato próximo ao > que estamos acostumados para horas e minutos). > > [ ] > > André > > > Em 31 de julho de 2014 13:57, 'Carlos Pinto' carlos.pin...@yahoo.com.br > [oracle_br] escreveu: > > >> >> Obrigado Chiappa, vou testar. >> >> >> >> >> >> Carlos >> >> >> >> *De:* oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] >> *Enviada:* 31 de julho de 2014 17:56 >> *Para:* oracle_br@yahoogrupos.com.br >> *Assunto:* [oracle_br] Re: Calculo Horas - Oracle 10g >> >> >> >> >> >> É ** trivial **, sabendo-se que a aritmética entre dates no Oracle te dá >> um valor numérico que representa qtdade de dias E que um dia tem 24 horas, >> 1 hora tem 60 mins e um min tem 60 segs : >> >> SYS:AS SYSDBA:SQL>set serveroutput on >> SYS:AS SYSDBA:SQL>DECLARE >>v_data_ini DATE := to_date('01/01/2014 10:00:00', 'dd/mm/ >> hh24:mi:ss'); >>v_data_fim DATE := to_date('03/01/2014 11:30:20', 'dd/mm/ >> hh24:mi:ss'); >> BEGIN >>dbms_output.put_line( >>'Dias:' || trunc( v_data_ini - v_data_fim ) || >>',Horas:' || trunc( mod( (v_data_ini - v_data_fim)*24, 24 ) )|| >>',Mins :' || trunc( mod( (v_data_ini - v_data_fim)*24*60, 60 ) ) || >>',Segs :' || trunc( mod( (v_data_ini-v_data_fim)*24*60*60, 60 ) ) >>); >> END; >> / >> >> Dias:-2,Horas:-1,Mins :-30,Segs :-19 >> >> PL/SQL procedure successfully completed. >> >> EVIDENTEMENTE : >> >> -> quando vc tira um valor maior de um valor menor vc obtém um Negativo >> : se for o caso, Inverter a ordem na subtração... >> >> -> se só te interessa horas, minutos e segundos, simplesmente Adicione >> nas duas datas um dia/mês/ano arbitrário qualquer, sempre o mesmo, E não >> use a lógica de DIAS >> >> []s >> >>Chiappa >> >> > > -- *Fabrício Pedroso Jorge.* Administrador de Banco de Dados Oracle 11g Certified SQL Expert Oracle 11g Certified Associate Oracle 11g Certified Professional Linux Professional Institute Certified Level I (LPIC-I) ITIL V3 Foudations certificacaodb.com.br *Resumo Profissional:* http://br.linkedin.com/in/fabriciojorge *Contatos:* + 55 91 88991116 skype: fabricio.pedroso.jorge fpjb...@gmail.com
Re: [oracle_br] Re: Calculo Horas - Oracle 10g
Carlos Só complementando... se o datatype for TIMESTAMP (ao invés de DATE), a diferença dos valores resulta em tipo INTERVAL (já num formato próximo ao que estamos acostumados para horas e minutos). [ ] André Em 31 de julho de 2014 13:57, 'Carlos Pinto' carlos.pin...@yahoo.com.br [oracle_br] escreveu: > > > Obrigado Chiappa, vou testar. > > > > > > Carlos > > > > *De:* oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] > *Enviada:* 31 de julho de 2014 17:56 > *Para:* oracle_br@yahoogrupos.com.br > *Assunto:* [oracle_br] Re: Calculo Horas - Oracle 10g > > > > > > É ** trivial **, sabendo-se que a aritmética entre dates no Oracle te dá > um valor numérico que representa qtdade de dias E que um dia tem 24 horas, > 1 hora tem 60 mins e um min tem 60 segs : > > SYS:AS SYSDBA:SQL>set serveroutput on > SYS:AS SYSDBA:SQL>DECLARE >v_data_ini DATE := to_date('01/01/2014 10:00:00', 'dd/mm/ > hh24:mi:ss'); >v_data_fim DATE := to_date('03/01/2014 11:30:20', 'dd/mm/ > hh24:mi:ss'); > BEGIN >dbms_output.put_line( >'Dias:' || trunc( v_data_ini - v_data_fim ) || >',Horas:' || trunc( mod( (v_data_ini - v_data_fim)*24, 24 ) )|| >',Mins :' || trunc( mod( (v_data_ini - v_data_fim)*24*60, 60 ) ) || >',Segs :' || trunc( mod( (v_data_ini-v_data_fim)*24*60*60, 60 ) ) >); > END; > / > > Dias:-2,Horas:-1,Mins :-30,Segs :-19 > > PL/SQL procedure successfully completed. > > EVIDENTEMENTE : > > -> quando vc tira um valor maior de um valor menor vc obtém um Negativo : > se for o caso, Inverter a ordem na subtração... > > -> se só te interessa horas, minutos e segundos, simplesmente Adicione > nas duas datas um dia/mês/ano arbitrário qualquer, sempre o mesmo, E não > use a lógica de DIAS > > []s > >Chiappa > > >
RE: [oracle_br] Re: Calculo Horas - Oracle 10g
Obrigado Chiappa, vou testar. Carlos De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Enviada: 31 de julho de 2014 17:56 Para: oracle_br@yahoogrupos.com.br Assunto: [oracle_br] Re: Calculo Horas - Oracle 10g É ** trivial **, sabendo-se que a aritmética entre dates no Oracle te dá um valor numérico que representa qtdade de dias E que um dia tem 24 horas, 1 hora tem 60 mins e um min tem 60 segs : SYS:AS SYSDBA:SQL>set serveroutput on SYS:AS SYSDBA:SQL>DECLARE v_data_ini DATE := to_date('01/01/2014 10:00:00', 'dd/mm/ hh24:mi:ss'); v_data_fim DATE := to_date('03/01/2014 11:30:20', 'dd/mm/ hh24:mi:ss'); BEGIN dbms_output.put_line( 'Dias:' || trunc( v_data_ini - v_data_fim ) || ',Horas:' || trunc( mod( (v_data_ini - v_data_fim)*24, 24 ) )|| ',Mins :' || trunc( mod( (v_data_ini - v_data_fim)*24*60, 60 ) ) || ',Segs :' || trunc( mod( (v_data_ini-v_data_fim)*24*60*60, 60 ) ) ); END; / Dias:-2,Horas:-1,Mins :-30,Segs :-19 PL/SQL procedure successfully completed. EVIDENTEMENTE : -> quando vc tira um valor maior de um valor menor vc obtém um Negativo : se for o caso, Inverter a ordem na subtração... -> se só te interessa horas, minutos e segundos, simplesmente Adicione nas duas datas um dia/mês/ano arbitrário qualquer, sempre o mesmo, E não use a lógica de DIAS []s Chiappa
[oracle_br] Re: Calculo Horas - Oracle 10g
É ** trivial **, sabendo-se que a aritmética entre dates no Oracle te dá um valor numérico que representa qtdade de dias E que um dia tem 24 horas, 1 hora tem 60 mins e um min tem 60 segs : SYS:AS SYSDBA:SQL>set serveroutput on SYS:AS SYSDBA:SQL>DECLARE v_data_ini DATE := to_date('01/01/2014 10:00:00', 'dd/mm/ hh24:mi:ss'); v_data_fim DATE := to_date('03/01/2014 11:30:20', 'dd/mm/ hh24:mi:ss'); BEGIN dbms_output.put_line( 'Dias:' || trunc( v_data_ini - v_data_fim ) || ',Horas:' || trunc( mod( (v_data_ini - v_data_fim)*24, 24 ) )|| ',Mins :' || trunc( mod( (v_data_ini - v_data_fim)*24*60, 60 ) ) || ',Segs :' || trunc( mod( (v_data_ini-v_data_fim)*24*60*60, 60 ) ) ); END; / Dias:-2,Horas:-1,Mins :-30,Segs :-19 PL/SQL procedure successfully completed. EVIDENTEMENTE : -> quando vc tira um valor maior de um valor menor vc obtém um Negativo : se for o caso, Inverter a ordem na subtração... -> se só te interessa horas, minutos e segundos, simplesmente Adicione nas duas datas um dia/mês/ano arbitrário qualquer, sempre o mesmo, E não use a lógica de DIAS []s Chiappa