如何修改递归SQL替换硬编码月数为指定结束日期生成月度数据
修改后的Oracle SQL代码
直接替换硬编码的月份数量为指定结束日期的当月第一天即可,以下是调整后的代码:
WITH test_data AS (SELECT TO_DATE ('01.03.2008', 'DD.MM.YYYY') AS mnth FROM DUAL), mnth_data (mnth, max_mnth) AS (SELECT mnth, TRUNC(TO_DATE ('04.30.2023', 'DD.MM.YYYY'), 'MM') AS max_mnth FROM test_data UNION ALL SELECT ADD_MONTHS (mnth, 1) AS mnth, max_mnth FROM mnth_data WHERE mnth < max_mnth) SELECT mnth FROM mnth_data
关键修改说明
- 把原代码中
ADD_MONTHS(mnth, 200)替换成TRUNC(TO_DATE('04.30.2023', 'DD.MM.YYYY'), 'MM'):通过TRUNC函数将指定的结束日期(04.30.2023)截断到当月第一天,直接得到目标月份的起始日期(2023-04-01),彻底移除硬编码的月份数。 - 递归条件
WHERE mnth < max_mnth保持不变,这样递归会生成从起始月份(2008年3月)到目标月份(2023年4月)的所有每月1日数据,最后一行正好是2023年4月1日。
内容的提问来源于stack exchange,提问作者Pugzly
相关产品推荐
相关产品推荐

