我在Oracle here中看到了TIMESTAMPDIFF函数的文档,但它提到它是针对“Oracle9i Lite”的。Oracle 11g中的TIMESTAMPDIFF?
当我尝试使用在Oracle 11g中的例子:
SELECT TIMESTAMPDIFF(SQL_TSI_DAY, CURRENT_DATE, '1998-12-09') FROM DUAL;
我得到TIMESTAMPDIFF无效的标识符错误。此功能在Oracle 11g中不可用吗?还是我的DBA需要配置?
我在Oracle here中看到了TIMESTAMPDIFF函数的文档,但它提到它是针对“Oracle9i Lite”的。Oracle 11g中的TIMESTAMPDIFF?
当我尝试使用在Oracle 11g中的例子:
SELECT TIMESTAMPDIFF(SQL_TSI_DAY, CURRENT_DATE, '1998-12-09') FROM DUAL;
我得到TIMESTAMPDIFF无效的标识符错误。此功能在Oracle 11g中不可用吗?还是我的DBA需要配置?
那个函数没有在甲骨文RDMBS存在;它明显在Oracle Lite中(我从来没有遇到过),我相信它在MySQL等其他数据库中。
有关于datetime and interval arithmetic的文档可以帮助您找到其中的一部分;你可以从另一个减去一个时间戳;或来自另一个日期的日期,或两者的组合 - 但坚持一种数据类型更简单。根据你使用,你会要么得到的间隔或代表天数的数字:如果你只是想你可以使用extract()
为间隔的整个天数来获得你想要的元素
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
或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之间的区别。
我从来没有遇到TIMESTAMPDIFF,但你可以做到通过简单地应用数学规律类似的东西到你的日期值:
SELECT CURRENT_DATE - to_timestamp('1998-12-09','yyyy-mm-dd') FROM DUAL;
您是否有名为CURRENT_DATE的列或者您是否想要使用SYSDATE? – Mihai
@Mihai:'CURRENT_DATE'在11g中有效。它与'SYSDATE'类似,但对会话时区敏感。 – Allan
每天学习新的东西@Allan – Mihai