我对Oracle不是很熟悉,所以这一切对我来说都有点陌生。
如果我有一个简单的计算,如下所示:
WITH dates AS (SELECT date '2020-01-31' AS jan31, date '2020-02-29' AS feb29 FROM dual)
SELECT
jan31 + interval '1' month AS nextmonth, -- 29 Feb 2020
feb29 + interval '1' year AS nextyear -- 28 Feb 2021
FROM dates;
两种计算都将失败,因为结果超出范围。
我在PostgreSQL、MariaDB和Microsoft SQL Server中也尝试过同样的方法,使用了它们自己对应的表达式,它们都产生了注释日期;也就是说,他们将结果剪辑到月底,而不是溢出。
我熟悉add_months
函数,它确实进行了适当的调整,但我想知道是否有一种方法可以使表达式date + interval
可靠地工作。
这里已经回答了这个问题:
Oracle DB Ora-01839:日期对于指定的月份无效。29-02-2016闰年
基本上,这就是Oracle实现的方式