首页 > 解决方案 > oracle 中的 Add_month 问题,我需要生成计费周期

问题描述

我需要生成到帐单周期日期,例如

我正在使用 Oracle Add_Month(i/p Date, 1)。这增加了一个新的月份并给我下个月的相同日期,在上述日期工作正常。

但是当我的输入日期是 2018 年 2 月 28 日并且如果我确实从 dual 中选择 ADD_MONTHS(date '2018-02-28', 1) 时,有一个极端情况,那么输出是 2018 年 3 月 31 日。

我预计结果应该是 3 月 28 日。这个角落案例的任何可能的解决方案。

标签: sqloracle

解决方案


稍微计算一下可能会有所帮助。

SQL> with test (col) as
  2    (select date '2020-03-27' from dual union all
  3     select date '2020-01-10' from dual union all
  4     select date '2018-02-27' from dual union all
  5     select date '2018-02-28' from dual
  6    )
  7  select col,
  8    least(add_months(col, 1),
  9          add_months(trunc(col, 'mm'), 1) + (col - trunc(col, 'mm'))
 10         ) result
 11  from test
 12  order by col;

COL        RESULT
---------- ----------
27.02.2018 27.03.2018
28.02.2018 28.03.2018
10.01.2020 10.02.2020
27.03.2020 27.04.2020

SQL>

推荐阅读