[英]TIMESTAMPDIFF in Oracle 11g?
我已经看到了在Oracle TIMESTAMPDIFF函数文档在这里 ,但提到它是“Oracle9i的精简版”。
当我尝试在Oracle 11g上使用示例时:
SELECT TIMESTAMPDIFF(SQL_TSI_DAY, CURRENT_DATE, '1998-12-09') FROM DUAL;
我在TIMESTAMPDIFF上收到无效的标识符错误。 Oracle 11g中不提供此功能吗? 还是我的DBA需要配置的东西?
该功能在Oracle RDMBS中不存在。 它显然是在Oracle Lite中做到的(我从未见过),而且我相信它在其他数据库(如MySQL)中也是如此。
有一些有关日期时间和时间间隔算法的文档,它们可以帮助您了解部分时间。 您可以从另一个时间戳中减去一个时间戳。 或另一个日期的一个日期,或两者的混合-但坚持一种数据类型更简单。 根据您使用的方式,您将获得一个间隔或一个表示天数的数字:
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()
将区间的分量转换为组合值, 如下所示 ; 并且确保您知道current_date
和sysdate
之间的区别,以及等效的时间戳 。
我从未遇到过TIMESTAMPDIFF,但是您可以通过将常规数学应用于日期值来完成类似的操作:
SELECT CURRENT_DATE - to_timestamp('1998-12-09','yyyy-mm-dd') FROM DUAL;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.