Предполагая, что столбцы уже являются датами, и, следовательно, преобразование в и из строк, которые вы делаете, бессмысленно, и что разница всегда будет меньше, чем день, вы могли бы сделать:
to_char(date '1970-01-01' + abs(stp.created_date - adhh.created_date), 'HH24:MI:SS')
Получается разница между датами в виде доли дня;удостоверяется, что это положительно через abs()
;а затем добавляет эту дробь обратно к номинальной дате, которая имеет время как полночь.Затем он преобразует это в строку, глядя только на время.
Быстрое демо:
-- 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
Если разница может превышать день, но не год, вы можете изменить форматмодель на что-то вроде 'FMDDD FMHH24:MI:SS'
, которая покажет полные дни в начале.