Por desgracia no ... Sin embargo, hay un truco simple si va a ser menos de 24 horas.
Oracle asume que un número agregado a una fecha es en días. Convierta la cantidad de segundos en días. Añadir el día actual, a continuación, utilizar la función to_date
tomar sólo las partes de su interesada en Asumiendo que tiene x
segundos:.
select to_char(sysdate + (x/(60 * 60 * 24)), 'HH24:MI:SS')
from dual
Esto no funcionará si hay más de 24 horas, aunque se puede quitar la corriente datos de nuevo y obtener la diferencia en días, horas, minutos y segundos.
Si quieres algo como: 51:10:05
, es decir, 51 horas, 10 minutos y 5 segundos, entonces vas a tener que usar trunc
.
Una vez más, asumiendo que tiene x
segundos ...
- El número de horas es
trunc(x/60/60)
- El número de minutos es
trunc((x - (trunc(x/60/60) * 60 * 60))/60)
- El número de segundos, por lo tanto es el
x - hours * 60 * 60 - minutes * 60
Saliendo con:
with hrs as (
select x, trunc(x/60/60) as h
from dual
)
, mins as (
select x, h, trunc((x - h * 60 * 60)/60) as m
from hrs
)
select h, m, x - (h * 60 * 60) - (m * 60)
from mins
He configurado un SQL Fiddle para demostrar.
Esto funciona bien. Pero si las horas> 99 horas no funcionan correctamente – user1430989
Ver mi edición usando TO_CHAR en lugar de LPAD. Debería manejar hasta 9999 horas ahora. Si necesita más que eso, puede agregar 9 adicionales a la cadena de formato en la primera función TO_CHAR. – Mike
Esto no viene correctamente para el caso siguiente: SELECCIONAR TO_CHAR (TRUNC (76014000/3600), 'FM999999900') || 'Hrs' || TO_CHAR (TRUNC (MOD (76014000,3600)/60), 'FM00') || 'Min' FROM DUAL; –