gpt4 book ai didi

Oracle DB Ora-01839 : date not valid for month specified. 29-02-2016 闰年

转载 作者:行者123 更新时间:2023-12-02 02:25:19 28 4
gpt4 key购买 nike

我们都知道今天是一个特殊的日子。 2016 年 2 月 29 日闰年

我们从 Oracle 数据库中的某些表收到错误消息。错误为:Oracle ORA-01839:日期对于指定的月份无效

例如,发生错误的简单选择:select * from table where table_date > sysdate -0.1;

对于其他表,此选择没有问题,只是对于某些表。

有办法解决这个问题吗?因为我们今天无法使用很多表。

我们正在使用Oracle 12c

最佳答案

经过深入研究,我们很清楚为什么我们的一些选择在今天不起作用。该错误是由关键字 interval 引起的,并且是一个已知问题。 (或者这就是 ANSI/ISO spec 所说的应该如何工作,第 205 页底部/第 206 页顶部)

这是来自 oracle community blog 的引述:

问题:

select to_date('2012-feb-29','yyyy-mon-dd') + interval '1' year as dt from dual;

ORA-01839: date not valid for month specified
01839. 00000 - "date not valid for month specified"
*Cause:
*Action:

select to_date('2012-feb-29','yyyy-mon-dd') + interval '2' year as dt from dual;

ORA-01839: date not valid for month specified
01839. 00000 - "date not valid for month specified"
*Cause:
*Action:

select to_date('2012-feb-29','yyyy-mon-dd') + interval '3' year as dt from dual;

ORA-01839: date not valid for month specified
01839. 00000 - "date not valid for month specified"
*Cause:
*Action:

select to_date('2012-feb-29','yyyy-mon-dd') + interval '4' year as dt from dual;

29-FEB-16 00:00:00


select to_date('2012-feb-29','yyyy-mon-dd') + interval '1' day as dt from dual;

01-MAR-12 00:00:00

select to_date('2012-feb-29','yyyy-mon-dd') + interval '1' month as dt from dual;

29-MAR-12 00:00:00

答案:

That's just how INTERVALs work. Leap years are the least of the problem; adding 1 month to March 31 results in the same error. If you want to make sure that the result is a valid DATE, then use ADD_MONTHS. (There's no separate function for adding years; use ADD_MONTH (SYSDATE, 12*n) to get the DATE that is n years from now.)

<小时/>

为什么在我们的案例中会发生这种情况:

在我们的例子中,出于安全原因,我们对某些表使用了虚拟专用数据库。我们在大多数选择中应用了 interval 关键字。

该怎么做:

改用ADD_MONTHS

select add_months(to_date('2012-feb-29','yyyy-mon-dd'), 12) as dt from dual;

关于Oracle DB Ora-01839 : date not valid for month specified. 29-02-2016 闰年,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35695175/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com