要求枚举给定时段内的季度信息,原数据模拟如下
这种需求可以通过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
部分结果如下