Oracle RDMBS 中不存在该功能;它显然在 Oracle Lite(我从未遇到过)中做到了,我相信它在 MySQL 等其他数据库中。
有涵盖datetime and interval arithmetic 的文档可以帮助您了解其中的一部分;您可以从另一个中减去一个时间戳;或一个日期与另一个日期,或两者的混合 - 但坚持一种数据类型更简单。根据您使用的方式,您将获得一个间隔或代表天数的数字:
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
如果您只想要整天数,您可以使用 extract() 作为间隔来获取您想要的元素,或者使用 trunc() 作为删除小数部分的数字:
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
如果您愿意,您也可以在比较之前trunc() 当前日期,因此您在午夜比较两者,这意味着不会删除小数部分:
SQL> SELECT TRUNC(CURRENT_DATE) - DATE '1998-12-09' FROM DUAL;
TRUNC(CURRENT_DATE)-DATE'1998-12-09'
------------------------------------
6169
我已将 ANSI 日期文字用于固定日期,但您可以使用现有的日期或时间戳变量或列;或 to_date() 或 to_timestamp() 如果您有不同格式的字符串。
您还可以使用extract() 将区间的组件转换为组合值as shown here;并确保您了解current_date and sysdate, and the timestamp equivalents 之间的区别。