Oracle - URGENTE: Query de tiempo

 
Vista:

URGENTE: Query de tiempo

Publicado por Juan (22 intervenciones) el 22/02/2007 14:24:05
Que tal amigos, necesito que alguien me ayude con una consulta. Resulta que tengo dos campos datetime y necesito hacer la diferencia entre ambos campos para determinar un tiempo que se demoro en procesar una orden.
Necesito este tiempo en días, horas, minutos, segundos.
Porque resulta que existen ordenes que para completarse tardaron más de 24 horas, que haría un día, pero necesito que me diga es el día, no en horas. Pero existen otras que se procesan en menos de 5 segundos.
Espero alguien pueda ayudarme, de antemano muchas gracias....
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:URGENTE: Query de tiempo

Publicado por Rodolfo Reyes (445 intervenciones) el 22/02/2007 15:38:46
Te pongo un algoritmo que calcula la diferencia de tiempo entre dos fechas, en años, meses, dias, horas, minutos y segundos.

Creo que este ejemplo lo saque de Metalink:

create table ddiff
(stdate date,
endate date);

insert into ddiff (stdate,endate) values
(to_date('01-jan-96 00:00:00','dd-mon-yy hh24:mi:ss'),
to_date('01-mar-97 01:01:01','dd-mon-yy hh24:mi:ss'));

insert into ddiff (stdate,endate) values
(to_date('01-jun-99 00:00:00','dd-mon-yy hh24:mi:ss'),
to_date('03-oct-99 02:02:02','dd-mon-yy hh24:mi:ss'));

set echo off
set serverout on

declare
cursor c1 is
select stdate,endate
from ddiff;

date_res number; end_now date; f_end_now char(20);
st_now date; temp_now date; f_st_now char(20);
yy_now number := 0;
mm_now number := 0;
dd_now number := 0;
hh_now number := 0;
f_hh_now number := 0;
mi_now number := 0;
f_mi_now number := 0;
ss_now number := 0;
f_ss_now number := 0;

begin
open c1;
loop

fetch c1 into st_now, end_now;
exit when c1%notfound;

-- Make st_now the earlier date
if (end_now < st_now) then
temp_now := end_now;
end_now := st_now;
st_now := temp_now;
end if;

f_end_now := to_char(end_now,'Mon-dd-yyyy hh24:mi:ss');
f_st_now := to_char(st_now,'Mon-dd-yyyy hh24:mi:ss');

yy_now := trunc(months_between(end_now,st_now)/12);
mm_now := mod(trunc(months_between(end_now,st_now)),12);
dd_now := trunc(end_now-add_months(st_now,months_between(end_now,st_now)));

date_res := (end_now-st_now);

hh_now := (date_res-floor(date_res))*24;
f_hh_now := trunc(hh_now);
mi_now := (hh_now-floor(hh_now))*60;
f_mi_now := trunc(mi_now);
ss_now := (mi_now-floor(mi_now))*60;
f_ss_now := round(ss_now);

dbms_output.put_line(chr(10)||
'The time difference between ');
dbms_output.put_line('starting date '||f_st_now);
dbms_output.put_line('and ending date '||
f_end_now||' is');
dbms_output.put_line(chr(10)||yy_now||' year(s), '||
mm_now||' month(s), '||dd_now||' day(s)');
dbms_output.put_line('and '||f_hh_now||' hour(s), '||
f_mi_now||' minute(s), '||
f_ss_now||' second(s)');
end loop;
close c1;
end;
/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:URGENTE: Query de tiempo

Publicado por Juan (22 intervenciones) el 22/02/2007 16:06:53
Gracias Rodolfo, voy a revisar esta info a ver si me funciona. realmente me hubiese gustado algo mas rapido, ya que el query que trato de armar tiene otras sentencias y es para poner en producción al momento de correrlo va a requerir tiempo, pero de todaas maneras gracias por tu ayuda, vere que puedo hacerle para optimizarlo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar