Cálculo de horas entre dos fechas/horas

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
  

Notael Vie, 08 Ene 2010 1:08 pm

Que no funcionó su esquema... = X al final terminé trabajando un fuction para eso... corta y funcional... echa un vistazo.

Código: Seleccionar todo
CREATE OR REPLACE function SEMASA.f_tempo_media ( day_fraction NUMBER)
return char
is

Years        NUMBER;
months       NUMBER;
days         NUMBER;
hrs          NUMBER;
mints        NUMBER;
sec          NUMBER;

begin

hrs   :=trunc(day_fraction*24);
mints :=trunc((((day_fraction)*24)-(hrs))*60);
sec   :=trunc(mod((day_fraction)*86400,60));

return(LPAD (hrs, 2, '0') ||':'|| LPAD (mints, 2, '0') ||':'|| LPAD (sec, 2, '0'));

end;
/
mateustads
Ubicación: MS

Mateus Leonardi

Notael Vie, 12 Mar 2010 3:20 pm

Estimados, estaba viendo la selecciona anterior y no pude encontrar un resultado para mi.

Necesito encontrar 1 programa vago para programar el servicio.
Mi aplicación que es una tabla donde tienes los tiempos programados.
Fecha de inicio fecha final TEMPPRIVISTO (DHPREVISTA).

Ej: tengo programado veces: 8:00-9:00 11:00-12:00 necesito el select devuelve el horario q tiene vagas del 10 11 todos esta teniendo en calendario de la cuenta de 8 el 12 de las 13:30 la 18:00 sólo durante el día de la semana y entre tiempos de 60 minutos.

Agradezco la colaboración.

Gracias.
huntersc
Ubicación: FLORIANOPOLIS - SC

Notael Mar, 21 Dic 2010 8:47 am

OK he conseguido este código
Código: Seleccionar todo
SELECT TO_CHAR ( (datahorainicio + INTERVAL || ''' ||tempo || ''' || MINUTE), 'HH24:mi:ss')
FROM
(SELECT datahorainicio,
        TO_CHAR ( ROUND (   (   (datahorafim - datahorainicio) * 1440)  )) AS tempo
FROM atendimento);
pero ahora necesito hacer una búsqueda con horarios de 12 minutos como hago. tiempo oexiste no en la tabla.
priajf
Ubicación: Florianopolis

Priscila Fernandes

Notael Mar, 21 Dic 2010 9:06 am

Explique mejor su situación.

Tiene una tabla con el tiempo de inicio y el final y quiero ver lo que pasó con 12 min??
SergioLBJr
Ubicación: Parobé - RS

Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Notael Jue, 15 Sep 2016 11:10 pm

Saludos. há veo a veces que hay muchos técnicos con la misma pregunta, "[b] ¿Cómo calcular el tiempo entre dos fechas? [b] ", sólo para volver a tapar. No es una cuestión de calcular el tiempo entre una fecha y la fecha actual (old_balance), porque sería simple utilizando la función de marca de hora de Oracle.
¿Sin saber más detalles, muy s pedir: para saber el tiempo entre las fechas?
Hay un número de razones. aún más para un DBA, seguimiento de procesos sería la respuesta más adecuada a esta pregunta.

¿Ahora en la práctica, sería alguien logró crear con exactitud un script que funciona al 100%?

Esto no es un desafío, no quiero ser repetitivo en las opciones de solución.

abrazos.
Victor_Ni

Notael Vie, 16 Sep 2016 7:42 am

Buenos días Victor, tiene una función que he creado y que está funcionando bien.
Por lo menos hasta ahora no recibo ningún error.


Código: Seleccionar todo
create or replace
function Fn_Intervalo_Tempo (P_Dt_Inic in date,
                             P_Dt_Fina in date) return varchar2 is
v_inte  number;
v_Hora  varchar2(200);
--
cursor c is
   SELECT lpad(   extract (day    from numtodsinterval(v_inte, 'day'))    ,5,' ') Qt_Dias,
          lpad(   extract (hour   from numtodsinterval(v_inte, 'day'))    ,2,'0') Qt_Horas,
          lpad(   extract (minute from numtodsinterval(v_inte, 'day' ))   ,2,'0') Qt_Minutos,
          lpad(   extract (second from numtodsinterval(v_inte, 'day'))    ,2,'0') Qt_Segundos
   FROM   dual;
c_r c%rowtype;
--
begin
--
v_inte := trunc((p_dt_Fina - p_dt_Inic),6);
dbms_output.put_line('v_inte     '||to_char(v_inte));
--
open c;
  fetch c into c_r;
   if c%found then
      --
      dbms_output.put_line('c_r.Qt_Dias     '||c_r.Qt_Dias);
      dbms_output.put_line('c_r.Qt_Horas    '||c_r.Qt_Horas);
      dbms_output.put_line('c_r.Qt_Minutos  '||c_r.Qt_Minutos);
      dbms_output.put_line('c_r.Qt_Segundos '||lpad(trunc(c_r.Qt_Segundos),2,'0'));
      --
      v_hora := c_r.Qt_Dias||' '||c_r.Qt_Horas||':'||c_r.Qt_Minutos||':'||lpad(trunc(c_r.Qt_Segundos),2,'0');
   end if;
close c;
return v_hora;
exception
when others then
  return 'erro';
End;
/
spernega
Ubicación: São Paulo - SP

Notael Sab, 17 Sep 2016 6:04 pm

Buenas tardes, spernega.

Su función era buena. más simple que la solución que he desarrollado.

Voy a hacer más pruebas sobre esta función.

Gracias.
Victor_Ni

Notael Sab, 17 Sep 2016 7:04 pm

Buenas noches Victor, buena suerte, adaptar lo que usted necesita.

En horas o minutos, simplemente se multiplican las variables.
spernega
Ubicación: São Paulo - SP


  • See also
    Replies
    Views
    Last Post

          Anterior

          Volver a SQL

          ¿Quién está conectado?

          Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados