sql - oracle 中的 Add_month 问题,我需要生成计费周期
问题描述
我需要生成到帐单周期日期,例如
- 如果我的输入是 3 月 27 日,那么我的下一个周期从 4 月 27 日开始。
- 如果输入是 1 月 10 日,则下一个周期应从 2 月 10 日开始。
我正在使用 Oracle Add_Month(i/p Date, 1)。这增加了一个新的月份并给我下个月的相同日期,在上述日期工作正常。
但是当我的输入日期是 2018 年 2 月 28 日并且如果我确实从 dual 中选择 ADD_MONTHS(date '2018-02-28', 1) 时,有一个极端情况,那么输出是 2018 年 3 月 31 日。
我预计结果应该是 3 月 28 日。这个角落案例的任何可能的解决方案。
解决方案
稍微计算一下可能会有所帮助。
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>
推荐阅读
- android - 禁用 RecyclerView 按钮
- java - 使用 SmsManager 从内部类发送短信不起作用
- ios - 在 iOS 上使用激活事件时,Firebase A/B 测试不计算用户数
- database - 具有大数据集的 Firestore where 子句
- jsf - 如何从包含 Bean 中设置注入的 CDI bean 的 bean 属性?
- spring - 尽管存在弹簧安全依赖性,如何禁用弹簧安全登录页面?
- c# - 如何使用(Jquery)或(Jquery and Ajax)将数据插入到 mvc 核心中的详细信息表中
- git - Jenkins 多分支管道中带有 BitBucket Notifier 的“java.lang.Exception:None 或多个 repos”
- javascript - 将视觉上在一起的节点分组
- javascript - onbeforeunload 更改对话框的 UI 或使用自定义