sql >> Base de Datos >  >> RDS >> Oracle

Horas Oracle SQL Diferencia entre fechas en HH:MM:SS

Suponiendo que las columnas ya son fechas y, por lo tanto, la conversión hacia y desde cadenas que está haciendo no tiene sentido, y que la diferencia siempre será inferior a un día, podría hacer:

to_char(date '1970-01-01' + abs(stp.created_date - adhh.created_date), 'HH24:MI:SS')

Esto obtiene la diferencia entre las fechas como una fracción de un día; se asegura de que sea positivo a través de abs(); y luego vuelve a agregar esa fracción a una fecha nominal, que tiene su hora como la medianoche. Luego lo convierte en una cadena, mirando solo la hora.

Demostración rápida:

-- CTEs to supply the two date/times
with stp (created_date) as (
  select cast(timestamp '2018-02-26 12:59:21' as date) from dual
),
adhh (created_date) as (
  select cast(timestamp '2018-02-26 12:59:32' as date) from dual
)
select to_char(date '1970-01-01' + abs(stp.created_date - adhh.created_date), 'HH24:MI:SS')
from stp cross join adhh;

TO_CHAR(
--------
00:00:11

Si la diferencia puede exceder un día, pero no un año, puede cambiar el modelo de formato a algo como 'FMDDD FMHH24:MI:SS' , que mostrará los días completos al principio.