Giả sử các cột đã là ngày tháng và do đó việc chuyển đổi đến và từ các chuỗi bạn đang thực hiện là vô nghĩa và sự khác biệt luôn diễn ra dưới một ngày, bạn có thể làm:
to_char(date '1970-01-01' + abs(stp.created_date - adhh.created_date), 'HH24:MI:SS')
Điều này nhận được sự khác biệt giữa các ngày dưới dạng một phần nhỏ của một ngày; đảm bảo rằng nó là tích cực qua abs()
; và sau đó cộng phần đó trở lại vào một ngày danh nghĩa, có thời gian là nửa đêm. Sau đó, nó chuyển đổi nó thành một chuỗi, chỉ xem xét thời gian.
Bản demo nhanh:
-- 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
Nếu sự khác biệt có thể vượt quá một ngày chứ không phải một năm, bạn có thể thay đổi mô hình định dạng thành một cái gì đó như 'FMDDD FMHH24:MI:SS'
, sẽ hiển thị đầy đủ các ngày khi bắt đầu.