Angenommen, die Spalten sind bereits Datumsangaben, und daher ist die Umwandlung in und von Zeichenfolgen, die Sie durchführen, sinnlos und der Unterschied wird immer weniger als einen Tag betragen, könnten Sie Folgendes tun:
to_char(date '1970-01-01' + abs(stp.created_date - adhh.created_date), 'HH24:MI:SS')
Dadurch wird die Differenz zwischen den Daten als Bruchteil eines Tages angezeigt. stellt sicher, dass es über abs()
positiv ist; und addiert dann diesen Bruchteil wieder zu einem nominellen Datum, das seine Zeit als Mitternacht hat. Dann wandelt es das in einen String um und betrachtet nur die Zeit.
Schnelle Demo:
-- 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
Wenn der Unterschied einen Tag, aber nicht ein Jahr überschreiten kann, können Sie das Formatmodell in etwas wie 'FMDDD FMHH24:MI:SS'
ändern , die zu Beginn ganze Tage anzeigt.