Calcular duração de um período entre duas datas

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
Maikew
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 29
Registrado em: Qua, 18 Jan 2012 8:55 am

Olá pessoal, boa tarde!

Estou enfrentando o seguinte problema:

Tenho uma tabela de tarefas e tenho que criar uma função que pegue a data_final e inicial desta tarefa e me retorne o tempo de duração. Já tentei diversas formas, até achei um tópico aqui no fórum mas não me ajudou totalmente. Eu precisava que essa procedure me retornasse no formato de 'DD 24HH:mm:ss', não consegui fazer o tratamento correto para conseguir este resultado. Se eu pegar a data_final - data_inicial vai me retornar um numero, e este numero não estou conseguindo converter para o numero de horas e/ou dias correspondentes.

alguém pode me ajudar???

Obrigado.
Avatar do usuário
theand
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Qua, 23 Set 2009 11:58 am
Localização: SP

Ele te volta o número de dias.
O q você precisa fazer é tratar a casa decimal pra calcular as horas e o decimal deste cálculo tratar pra trazer os minutos e depois os segundos.
Maikew
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 29
Registrado em: Qua, 18 Jan 2012 8:55 am

theand escreveu:Ele te volta o número de dias.
O q você precisa fazer é tratar a casa decimal pra calcular as horas e o decimal deste cálculo tratar pra trazer os minutos e depois os segundos.
Certo, mas eu gostaria, se puder, de um exemplo que faça esse tratamento, pois já tentei, mas até agora minhas contas não deram muito certo... :oops:
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Dá uma olhada e vê se te ajuda:
http://glufke.net/oracle/viewtopic.php?f=3&t=8286
Maikew
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 29
Registrado em: Qua, 18 Jan 2012 8:55 am

Noctifero escreveu:Dá uma olhada e vê se te ajuda:
http://glufke.net/oracle/viewtopic.php?f=3&t=8286
Obrigado, só ficou uma dúvida ainda, aí postei ela nesse link que você me indicou..

Abraço o/
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Cmo postado em:
http://glufke.net/oracle/viewtopic.php? ... 971#p32971

Selecionar tudo

DECLARE
  --Parametros da data
  date_1 DATE := TO_DATE('16/01/2012 10:30:14', 'dd/mm/rrrr hh24:mi:ss');
  date_2 DATE := SYSDATE;
  --- 
  ndate_1   NUMBER;
  ndate_2   NUMBER;
  nsecond_1 NUMBER(5, 0);
  nsecond_2 NUMBER(5, 0);
  ---
  res     NUMBER;
  dias    NUMBER;
  horas   NUMBER;
  minutos NUMBER;
  seg     NUMBER;
BEGIN
  ndate_1   := to_number(to_char(date_1, 'J'));
  ndate_2   := to_number(to_char(date_2, 'J'));
  nsecond_1 := to_number(to_char(date_1, 'SSSSS'));
  nsecond_2 := to_number(to_char(date_2, 'SSSSS'));

  --total da diferença em segundos.
  res       := ((ndate_2 - ndate_1) * 86400) + (nsecond_2 - nsecond_1);

  dias    := trunc(res / 86400, 0);
  horas   := trunc(MOD(res, 86400) / 3600, 0); /* + (dias * 24)*/
  minutos := trunc(MOD(res, 3600) / 60);
  seg     := MOD(res, 60);
  dbms_output.put_line('EM DIAS : ' || dias || ' dias ' || horas || ':' || minutos || ':' || seg);
  ---
  horas := horas + (dias * 24);
  dbms_output.put_line('EM HORAS: ' || horas || ':' || minutos || ':' || seg);
END;
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante