Ако приемем, че колоните вече са дати и следователно преобразуването към и от низове, които правите, е безсмислено и че разликата винаги ще бъде по-малко от един ден, можете да направите:
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'
, което ще показва пълни дни в началото.