[英]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內核只是調用SYSDATE
的C時間函數和SYSTIMESTAMP
的C gettimeofday函數 ,所以無論庫實現SYSTIMESTAMP
是什么行為都是你得到的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.