Chức năng đó không tồn tại trong Oracle RDMBS; nó rõ ràng đã làm được trong Oracle Lite (mà tôi chưa bao giờ gặp phải) và tôi tin rằng nó có trong các cơ sở dữ liệu khác như MySQL.
Có tài liệu bao gồm ngày giờ và số học khoảng thời gian điều đó sẽ giúp bạn có được một phần của con đường đến đó; bạn có thể trừ một dấu thời gian này cho một dấu thời gian khác; hoặc ngày này với ngày khác, hoặc kết hợp cả hai - nhưng đơn giản hơn là gắn vào một kiểu dữ liệu. Tùy thuộc vào cách bạn sử dụng, bạn sẽ nhận được một khoảng thời gian hoặc một số đại diện cho số ngày:
SQL> SELECT CURRENT_TIMESTAMP - TIMESTAMP '1998-12-09 00:00:00' FROM DUAL;
CURRENT_TIMESTAMP-TIMESTAMP'1998-12-0900:00:00'
---------------------------------------------------------------------------
+000006169 16:16:21.287166000
SQL> SELECT CURRENT_DATE - DATE '1998-12-09' FROM DUAL;
CURRENT_DATE-DATE'1998-12-09'
-----------------------------
6169.67775
Nếu bạn chỉ muốn số ngày cả ngày, bạn có thể sử dụng extract()
để khoảng thời gian chỉ nhận được phần tử bạn muốn hoặc trunc()
cho số để loại bỏ phần phân số:
SQL> SELECT EXTRACT(DAY FROM CURRENT_TIMESTAMP - TIMESTAMP '1998-12-09 00:00:00') FROM DUAL;
EXTRACT(DAYFROMCURRENT_TIMESTAMP-TIMESTAMP'1998-12-0900:00:00')
---------------------------------------------------------------
6169
SQL> SELECT TRUNC(CURRENT_DATE - DATE '1998-12-09') FROM DUAL;
TRUNC(CURRENT_DATE-DATE'1998-12-09')
------------------------------------
6169
Bạn cũng có thể trunc()
ngày hiện tại trước khi so sánh nếu bạn muốn, vì vậy bạn đang so sánh cả hai vào lúc nửa đêm, điều đó có nghĩa là sẽ không có phần ngày phân số để loại bỏ:
SQL> SELECT TRUNC(CURRENT_DATE) - DATE '1998-12-09' FROM DUAL;
TRUNC(CURRENT_DATE)-DATE'1998-12-09'
------------------------------------
6169
Tôi đã sử dụng các ký tự ngày ANSI cho ngày cố định, nhưng bạn có thể sử dụng biến hoặc cột ngày hoặc dấu thời gian hiện có; hoặc to_date()
hoặc to_timestamp()
nếu bạn có một chuỗi ở định dạng khác.
Bạn cũng có thể sử dụng extract()
để chuyển đổi các thành phần của khoảng thời gian thành giá trị kết hợp, như được hiển thị ở đây
; và cũng đảm bảo rằng bạn biết sự khác biệt giữa current_date
và sysdate
và các dấu thời gian tương đương
.