要求枚举给定时段内的季度信息,原数据模拟如下
这种需求可以通过connect by 语句来分拆,只要计算出中间间隔的季度即可
SELECT t.id, t.开始年, t.开始季度, t.结束年, t.结束季度, lv, to_char(d3, 'yyyy') AS 枚举年, to_char(d3, 'q') AS 枚举季度 FROM (SELECT t.*, LEVEL AS lv, add_months(to_date(t.开始年 || '-' || ((t.开始季度 - 1) * 3 + 1), 'yyyy-mm'), (LEVEL - 1) * 3) AS d3 FROM b_project t CONNECT BY (PRIOR ROWID) = ROWID AND LEVEL <= ((t.结束年 * 100 + t.结束季度 * 25) - (t.开始年 * 100 + (t.开始季度 - 1) * 25)) / 25 AND (PRIOR dbms_random.value) IS NOT NULL ) t ORDER BY id, lv部分结果如下