Re: [oracle_br] Re: Calculo Horas - Oracle 10g

2014-07-31 Por tôpico Fabricio Pedroso Jorge fpjb...@gmail.com [oracle_br]
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

2014-07-31 Por tôpico Andre Santos andre.psantos...@gmail.com [oracle_br]
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

2014-07-31 Por tôpico 'Carlos Pinto' carlos.pin...@yahoo.com.br [oracle_br]
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

2014-07-31 Por tôpico jlchia...@yahoo.com.br [oracle_br]
É ** 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