如何处理Oracle中的闰秒

时间:2015-06-30 10:47:53

标签: oracle

今晚将有一个闰秒加入时钟,并且在当天最后一小时的最后一分钟将有61秒。

2015-06-30 23:59:60

但是,Oracle一分钟只支持60秒:

TO_DATE( '2015-06-30 23:59:60', 'YYYY-MM-DD HH24:MI:SS' )    

错误:

ORA-01852: seconds must be between 0 and 59

SELECT TO_DATE( '2015-06-30 23:59:59', 'YYYY-MM-DD HH24:MI:SS' ) + INTERVAL '1' SECOND AS Incr_Second_Before,
       TO_DATE( '2015-07-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS' ) - INTERVAL '1' SECOND AS Decr_Second_After
FROM   DUAL

给出输出:

|     INCR_SECOND_BEFORE |      DECR_SECOND_AFTER |
|------------------------|------------------------|
| July, 01 2015 00:00:00 | June, 30 2015 23:59:59 |

有没有办法在Oracle中处理闰秒?

1 个答案:

答案 0 :(得分:2)

来自MOS -

  

使用ORA-01852(文档版本)将闰秒插入时间戳列失败   ID 1553906.1)

     

适用于:

     

Oracle数据库 - 企业版 - 版本8.1.7.4及更高版本

     

Oracle数据库 - 标准版 - 版本8.1.7.4及更高版本

     

本文档中的信息适用于任何平台。

     

<强>症状:

     

尝试将闰秒插入时间戳列失败,但失败:   ORA-01852:秒必须介于0到59之间

     

<强>原因

     

无法在日期或时间戳中存储&gt; 59秒的值   数据类型

     

<强>解

     

要解决此问题,可将闰秒记录存储在a中   varchar2数据类型,例如。

     

SQL> create table test (val number, t varchar2(30));

     

Table created.

     

SQL> insert into test values(123, '2012-06-30T23:59:60.000000Z');

     

1 row created.

不是最好的解决方案,而是唯一的解决方案。