Kết quả của số học dấu thời gian là một kiểu dữ liệu INTERVAL. Bạn có một NGÀY LIÊN TỤC ĐẾN THỨ HAI ở đó ...
Nếu bạn muốn số phút, một cách sẽ là sử dụng EXTRACT()
, ví dụ:
select extract( minute from interval_difference ) * 60
+ extract( hour from interval_difference ) * 60
+ extract( day from interval_difference ) * 60 * 24
from ( select systimestamp - (systimestamp - 1) as interval_difference
from dual )
Ngoài ra, bạn có thể sử dụng một thủ thuật với ngày tháng:
select sysdate + (interval_difference * 1440) - sysdate
from (select systimestamp - (systimestamp - 1) as interval_difference
from dual )
Phiên bản "thủ thuật" hoạt động vì thứ tự ưu tiên của toán tử và sự khác biệt giữa số học ngày và dấu thời gian.
Ban đầu hoạt động trông như thế này:
date + ( interval * number ) - date
Như đã đề cập trong tài liệu:
Oracle đánh giá các biểu thức bên trong dấu ngoặc trước khi đánh giá các biểu thức bên ngoài.
Vì vậy, hoạt động đầu tiên thực hiện nó để nhân khoảng thời gian với 1,440. Khoảng thời gian, tức là một khoảng thời gian rời rạc, nhân với một số là một khoảng thời gian rời rạc khác, hãy xem tài liệu về ngày giờ và số học khoảng thời gian. Vì vậy, kết quả của hoạt động này là một khoảng thời gian, để lại cho chúng tôi:
date + interval - date
Toán tử cộng được ưu tiên hơn số trừ ở đây. Lý do cho điều này có thể là một khoảng thời gian trừ đi một ngày là một hoạt động không hợp lệ, nhưng tài liệu cũng ngụ ý rằng đây là trường hợp (không đưa ra và nói điều đó). Vì vậy, hoạt động đầu tiên được thực hiện là ngày + khoảng thời gian. Một ngày cộng với một khoảng thời gian là một ngày. Chỉ rời đi
date - date
Theo tài liệu, điều này dẫn đến một số nguyên đại diện cho số ngày. Tuy nhiên, bạn đã nhân khoảng thời gian ban đầu với 1,440, vì vậy khoảng thời gian này bây giờ đại diện cho 1,440 lần số ngày mà nó sẽ có. Sau đó, bạn chỉ còn lại số giây.
Cần lưu ý rằng:
Khi các phép tính khoảng thời gian trả về giá trị datetime, kết quả phải là giá trị datetime thực nếu không cơ sở dữ liệu trả về lỗi. Ví dụ:hai câu lệnh tiếp theo trả về lỗi:
Phương pháp "thủ thuật" sẽ thất bại, hiếm khi nhưng nó vẫn sẽ thất bại. Tốt nhất bạn nên làm đúng cách.