Cita:
Iniciado por SangrePura Hola jachguate,
Como bien lo dijiste, se trata de aritmética de horas. Te cuento mi problema:
Necesito realizar operaciones aritméticas con datos de hora en la base express de Oracle (sumar horas y minutos) , nada difícil, sólo que no se me ocurre cómo hacerlo. Por ejemplo, tengo que poner que trabajé 1:40 hs en un determinado proyecto y 1:30 en otro. El problema es que la suma de estos valores se hace a través de NUMBER y me muestra 2 horas y 70 minutos en vez de 3 horas y 10 minutos
Con Apex Express no es complicada la suma de las horas porque son valores numéricos redondos, pero me matan los minutos. Entonces me surge la necesidad de tratar los valores como datos de hora exclusivamente. Se me ocurrió probar con datos TIMESTAMP pero éste es básicamente una extensión de DATE y no creo que se ajuste a mi necesidad.
Agradezco cualquier sugerencia al respecto.
Saludos!
En tu caso, si usas date o timestamp, seguro te encontrarás con algunos otros casos interesantes.
Por ejemplo, si en un proyecto trabajaste 15:30 horas y en otro 10:00 horas, la suma es 25:30 horas, o una fecha x a la 1:30 AM?
Si usas mi sugerencia anterior (de hace 6 años!!) y almacenas fracciones de día o fracciones de hora, podrás hacer aritmética tranquilamente y luego "convertir" solo para presentar los datos.
Por ejemplo, si almacenas 1.5 en lugar de 1:30 hrs, y 1.66666666667 en lugar de 1:40, la suma te dará 3.16666666667, lo que puede convertirse nuevamente a 3:10 con relativa facilidad.
por ejemplo:
Código:
select to_char(trunc(horas), '00')||':'||to_char((horas-trunc(horas))*60, 'FM00')
from (select 1.5 + 1.6666666666666666666666 horas from dual);
La conversión al "formato de visualización" podrías hacerla no solo en un query, sino a nivel del front-end que uses para mostrar los datos. De la misma forma, convertir los datos ingresador por el usuario en decimal antes de llevarlos a la BD.
Un saludo.