Tôi đoán các cột của bạn được xác định là timestamp
thay vì date
.
Kết quả của việc trừ dấu thời gian là một khoảng interval
trong khi kết quả của phép trừ date
cột là một số đại diện cho số ngày giữa hai ngày.
Điều này được ghi lại trong sách hướng dẫn:
http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements001.htm#i48042
Vì vậy, khi bạn truyền các cột dấu thời gian của mình cho đến nay, bạn sẽ nhận được những gì bạn mong đợi:
with dates as (
select timestamp '2012-04-27 09:00:00' as col1,
timestamp '2012-04-26 17:35:00' as col2
from dual
)
select col1 - col2 as ts_difference,
cast(col1 as date) - cast(col2 as date) as dt_difference
from dates;
Chỉnh sửa :
Nếu bạn muốn chuyển đổi khoảng thời gian như vậy, ví dụ:số giây (dưới dạng số), bạn có thể làm như sau:
with dates as (
select timestamp '2012-04-27 09:00:00.1234' as col1,
timestamp '2012-04-26 17:35:00.5432' as col2
from dual
)
select col1 - col2 as ts_difference,
extract(hour from (col1 - col2)) * 3600 +
extract(minute from (col1 - col2)) * 60 +
(extract(second from (col1 - col2)) * 1000) / 1000 as seconds
from dates;
Kết quả ở trên là 55499.5802