列がすでに日付であり、したがって、実行している文字列への変換と文字列からの変換が無意味であり、差が常に1日未満になると仮定すると、次のことができます。
to_char(date '1970-01-01' + abs(stp.created_date - adhh.created_date), 'HH24:MI:SS')
これにより、日付間の差が1日の端数として取得されます。 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
差が1日を超える可能性があるが、1年を超える可能性がある場合は、フォーマットモデルを'FMDDD FMHH24:MI:SS'
のようなものに変更できます。 、開始時に丸一日表示されます。