【问题标题】:How to increase date by 1 month in Oracle sql如何在 Oracle sql 中将日期增加 1 个月
【发布时间】:2023-01-21 22:27:22
【问题描述】:
我想按订阅月份添加 1 个月的循环以获得每个客户的每月付款日期。
我有一张这样的桌子:
| ID |
REGISTER DATE |
SUBSCRIBED MONTH |
| 1 |
2022.01.01 |
3 |
| 2 |
2022.07.01 |
6 |
我想要这样的结果:
| ID |
REGISTER DATE |
SUBSCRIBED MONTH |
MUST PAY DATE |
| 1 |
2022.01.01 |
3 |
2022.01.01 |
| 1 |
2022.01.01 |
3 |
2022.02.01 |
| 1 |
2022.01.01 |
3 |
2022.03.01 |
| 2 |
2022.07.01 |
6 |
2022.07.01 |
| 2 |
2022.07.01 |
6 |
2022.08.01 |
| 2 |
2022.07.01 |
6 |
2022.09.01 |
| 2 |
2022.07.01 |
6 |
2022.10.01 |
| 2 |
2022.07.01 |
6 |
2022.11.01 |
| 2 |
2022.07.01 |
6 |
2022.12.01 |
试过这个,但返回重复。
SELECT ID, ADDMONTHS(REGISTER_DATE,LEVEL) FROM SUBLIST CONNECT BY LEVEL<=SUB_MONTH
任何帮助将不胜感激。非常感谢。
【问题讨论】:
标签:
sql
oracle
oracle-sqldeveloper
【解决方案1】:
这是一个选项:
设置日期格式(您不必这样做):
SQL> alter session set nls_date_format = 'yyyy.mm.dd';
Session altered.
样本数据:
SQL> with test (id, register_date, subscribed_month) as
2 (select 1, date '2022-01-01', 3 from dual union all
3 select 2, date '2022-07-01', 6 from dual
4 )
查询从这里开始:
5 select id, register_date, subscribed_month,
6 add_months(register_date, column_value - 1) must_pay_date
7 from test cross join table(cast(multiset(select level from dual
8 connect by level <= subscribed_month
9 ) as sys.odcinumberlist))
10 order by id, register_date, must_pay_date;
ID REGISTER_D SUBSCRIBED_MONTH MUST_PAY_D
---------- ---------- ---------------- ----------
1 2022.01.01 3 2022.01.01
1 2022.01.01 3 2022.02.01
1 2022.01.01 3 2022.03.01
2 2022.07.01 6 2022.07.01
2 2022.07.01 6 2022.08.01
2 2022.07.01 6 2022.09.01
2 2022.07.01 6 2022.10.01
2 2022.07.01 6 2022.11.01
2 2022.07.01 6 2022.12.01
9 rows selected.
SQL>