今晚将有一个闰秒添加到时钟,在一天的最后一小时的最后一分钟将有61秒.
2015-06-30 23:59:60
Run Code Online (Sandbox Code Playgroud)
但是,Oracle一分钟只支持60秒:
TO_DATE( '2015-06-30 23:59:60', 'YYYY-MM-DD HH24:MI:SS' )
Run Code Online (Sandbox Code Playgroud)
错误:
ORA-01852: seconds must be between 0 and 59
Run Code Online (Sandbox Code Playgroud)
和
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
Run Code Online (Sandbox Code Playgroud)
给出输出:
| INCR_SECOND_BEFORE | DECR_SECOND_AFTER |
|------------------------|------------------------|
| July, 01 2015 00:00:00 | June, 30 2015 23:59:59 |
Run Code Online (Sandbox Code Playgroud)
有没有办法在Oracle中处理闰秒?
来自 MOS-
将闰秒插入时间戳列失败,出现 ORA-01852(文档 ID 1553906.1)
适用于:
Oracle 数据库 - 企业版 - 版本 8.1.7.4 及更高版本
Oracle 数据库 - 标准版 - 版本 8.1.7.4 及更高版本
本文档中的信息适用于任何平台。
症状:
尝试将闰秒插入时间戳列失败并显示:ORA-01852:秒必须介于 0 和 59 之间
原因
无法在日期或时间戳数据类型中存储 >59 秒的值
解决方案
要解决此问题,可以将闰秒记录存储在 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.
不是最好的解决方案,而是唯一的解决方案。
| 归档时间: |
|
| 查看次数: |
963 次 |
| 最近记录: |