我在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