Zakładając, że kolumny są już datami, a zatem konwersja do i z ciągów, które wykonujesz, jest bezcelowa, a różnica zawsze będzie mniejsza niż jeden dzień, możesz zrobić:
to_char(date '1970-01-01' + abs(stp.created_date - adhh.created_date), 'HH24:MI:SS')
Daje to różnicę między datami jako ułamek dnia; upewnia się, że jest pozytywny poprzez abs()
; a następnie dodaje ten ułamek z powrotem do daty nominalnej, która ma swój czas jako północ. Następnie konwertuje to na ciąg, patrząc tylko na czas.
Szybka prezentacja:
-- 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
Jeśli różnica może przekroczyć dzień, ale nie rok, możesz zmienić model formatu na mniej więcej 'FMDDD FMHH24:MI:SS'
, który na początku pokaże pełne dni.