如何使用 add_months 函数添加具有特定日期的一天

How to add a day with a specific date using add_months function

我正在尝试使用 oracle 数据库中的 add_months 添加具有特定日期的一天。 我写了这一行:

SELECT ADD_MONTHS('01-JAN-2018', MONTHS_BETWEEN('02-JAN-2018', '01-JAN-2018')) FROM DUAL;

这个returns:

01-JAN-18

为什么不 return 02-JAN-18?我可以使用此功能在日期上加一天吗?

Why doesn't it return 02-JAN-18??

根据 MONTHS_BETWEEN 文档,

The MONTHS_BETWEEN function calculates the number of months between two dates. When the two dates have the same day component or are both the last day of the month, then the return value is a whole number. Otherwise, the return value includes a fraction that considers the difference in the days based on a 31-day month

所以,

select MONTHS_BETWEEN('02-JAN-2018', '01-JAN-2018') FROM DUAL ; 

产量

.0322580645161290322580645161290322580645

ADD_MONTHS returns日期日期加整数月。 因此,.0322.. 被视为整数 0,您的查询等同于

SELECT ADD_MONTHS('01-JAN-2018', 0) FROM DUAL;

要加上 1 个月,只需取两个日期的差即可。

SELECT ADD_MONTHS(DATE '2018-01-01', DATE '2018-01-02' - DATE '2018-01-01') FROM DUAL;

或者更好,添加 1 个月的 INTERVAL

SELECT DATE '2018-01-01' + INTERVAL '1' MONTH FROM DUAL; 

要回答您的问题,加 1 天,只需使用

SELECT DATE '2018-01-01' + 1 FROM DUAL;