【问题标题】: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>
    

    【讨论】:

      猜你喜欢
      • 2017-02-05
      • 1970-01-01
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      • 2019-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多