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.