Oracle ADD_MONTHS()函数进行月份加减计算

1
2
3
4
/*
* 获取上月同期(上个月同一天)
*/
SELECT to_char(ADD_MONTHS(TO_DATE('20210228','YYYYMMDD'), 1), 'YYYYMMDD') stat_date FROM dual;

关于 ADD_MONTHS()函数问题:不管加减月,如果当前日期是当月最后一天,那么结果也会是那个月的最后一天

比如:0228 减1月就是 0131(而不是0128),加1月就是 0331

所以:0328 减1月是 0228,再加1月就是 0331,会与最初值不一致,查询时要避免同时有加减操作,以减小数据偏差。

比如以下sql,做了加一个月再减一个月的操作,理论上结果数据应该是和入参日期一致,但实际不是。

1
SELECT to_char(ADD_MONTHS(ADD_MONTHS(TO_DATE('20210328', 'YYYYMMDD'),  -1), 1), 'YYYYMMDD') stat_date FROM dual;

比如以下的需求sql:

查询当月和上个月的同期值:(入参是当月时间,查询上月数据时条件进行了一次 ADD_MONTHS(-1) 计算,当月数据要和上月数据通过时间关联,如果在上月数据的查询结果中对时间进行 ADD_MONTHS(+1) 计算,结果数据误差就会变大。所以需要做的应该是对当月数据的查询结果做 ADD_MONTHS(-1) 计算,数据误差就会小一点)

ADD_MONTHS函数使用


Oracle ADD_MONTHS()函数进行月份加减计算
https://binbiubiu.github.io/20210818120000/
作者
Binbiubiu
发布于
2021年8月18日