Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle SQL Hours Différence entre les dates en HH:MM:SS

En supposant que les colonnes sont déjà des dates, et donc la conversion vers et depuis les chaînes que vous faites est inutile, et que la différence sera toujours inférieure à un jour, vous pourriez faire :

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

Cela obtient la différence entre les dates sous forme de fraction de jour; s'assure qu'il est positif via abs(); puis ajoute cette fraction à une date nominale, qui a pour heure minuit. Ensuite, il convertit cela en une chaîne, en ne regardant que l'heure.

Démo rapide :

-- 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 différence peut dépasser un jour, mais pas un an, vous pouvez modifier le modèle de format en quelque chose comme 'FMDDD FMHH24:MI:SS' , qui affichera des jours complets au début.