2012-05-25 108 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所以无论库实现恰好是你会得到的行为。