簡體   English   中英

Oracle Date Rounding of Milliseconds

[英]Oracle Date Rounding of Milliseconds

Oracle DB如何在其日期函數中循環毫秒?

例如,如果sysdate完全以“05/25/2012 01:15:25.900”運行,則日期將存儲為“05/25/2012 01:15:26”(向上舍入)或“05/25 /” 2012 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時,實際上只有幾毫秒才被刪除?

將時間分數向上舍入將導致sysdate平均快半秒。

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

這顯然是愚蠢的,所以我將采用截斷而不是舍入。

由於Oracle DATE僅將日期存儲到第二個,而SYSDATE依賴於底層操作系統的時鍾,因此我希望結果取決於操作系統。 甲骨文剛剛呼喚操作系統問:“什么是日期到第二”為SYSDATE和“什么是日期你有最精准”的SYSTIMESTAMP 由於該調用本質上是依賴於操作系統的,並且文檔中沒有另外指定行為,我希望不同的操作系統會或者至少可以有不同的實現(從技術上講,更可能是數據庫內核是C庫的C庫)針對每個操作系統進行編譯)。

我強烈懷疑Oracle內核只是調用SYSDATEC時間函數SYSTIMESTAMPC gettimeofday函數 ,所以無論庫實現SYSTIMESTAMP是什么行為都是你得到的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM