Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle SQL Hours Differenza tra le date in HH:MM:SS

Supponendo che le colonne siano già date, e quindi la conversione da e verso le stringhe che stai facendo è inutile e che la differenza sarà sempre inferiore a un giorno, potresti fare:

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

Questo ottiene la differenza tra le date come una frazione di giorno; assicurati che sia positivo tramite abs(); e quindi aggiunge quella frazione a una data nominale, che ha l'ora di mezzanotte. Quindi lo converte in una stringa, guardando solo l'ora.

Demo veloce:

-- 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

Se la differenza può superare un giorno, ma non un anno, puoi cambiare il modello di formato in qualcosa come 'FMDDD FMHH24:MI:SS' , che mostrerà giorni interi all'inizio.