2012-05-25 111 views
1

Oracle數據庫日期函數中的毫秒數如何計算?Oracle日期四捨五入的時間

例如,如果sysdate在「05/25/2012 01:15:25.900」完全運行,日期是否將存儲爲「2012年5月25日01:15:26」(四捨五入)或「 「2012年5月25日01:15:25」(四捨五入)?

它是否收集了超過半毫秒的所有事情,並且降低了低於半毫秒的所有事情?

下面是一個簡單的測試我放在一起:

SELECT to_char(systimestamp, 'dd-mm-yyyy hh:mi:ss:ff') as sys_time_stamp, 
to_char(
    TO_DATE (
     TO_CHAR (SYSTIMESTAMP, 'YYYY-MON-DD HH24:MI:SS'), 
     'YYYY-MON-DD HH24:MI:SS'), 
    'dd-mm-yyy hh:mi:ss') as sys_date 
FROM DUAL; 

1趟
sys_time_stamp:25-05-2012 12:37:32:798000
sys_date:25-05-012 12時37分:32

運行2
sys_time_stamp:25-05-2012 12:43:41:322000
sys_date:25-05-012 12時43分41秒

這將表明至少在將systimestamp轉換爲date時,毫秒將被丟棄。但是,當實際生成sysdate時,毫秒實際上是否下降?

+1

您是否嘗試過任何測試?我們不是您的個人搜索助手。 –

+0

'sysdate'如何成爲'05/25/2012 01:15:25.900'? 'Sysdate'的類型是'date',只有第二個分辨率。 –

+0

他們稱之爲'約會'?這是一個低分辨率的時間戳... –

回答

2

將時間的小數部分舍入將導致sysdate平均快半秒。

它會翻到第二天23:59:59.500。

這顯然是愚蠢的,所以我要去截斷,而不是舍入。

1

由於Oracle DATE僅存儲第二個日期,而SYSDATE依賴於底層操作系統的時鐘,所以我期望結果取決於操作系統。 Oracle僅向SYSTIMESTAMP詢問SYSDATE詢問「第二天的日期」和「您的最高精度日期」操作系統。由於該調用本質上取決於與操作系統有關的依賴關係,並且行爲在文檔中未另行指定,所以我期望不同的操作系統可以或至少可以有不同的實現(從技術上講,數據庫內核更可能是C庫針對每個操作系統編譯)。

我強烈懷疑Oracle內核只是調用C time functionSYSDATEC gettimeofday functionSYSTIMESTAMP所以無論庫實現恰好是你會得到的行爲。