今晚将有一个闰秒加入时钟,并且在当天最后一小时的最后一分钟将有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中处理闰秒?
答案 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.
不是最好的解决方案,而是唯一的解决方案。