繁体   English   中英

Oracle 11g中的TIMESTAMPDIFF?

[英]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_datesysdate之间的区别,以及等效的时间戳

我从未遇到过TIMESTAMPDIFF,但是您可以通过将常规数学应用于日期值来完成类似的操作:

SELECT CURRENT_DATE - to_timestamp('1998-12-09','yyyy-mm-dd') FROM DUAL;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM