WITH t AS ( SELECT 'A' cd, '20220401' dt FROM dual UNION ALL SELECT 'B', '20220501' FROM dual ) SELECT cd , TO_CHAR(ADD_MONTHS(dt, (CEIL(MONTHS_BETWEEN(sdt, dt) / 3) + lv - 1) * 3), 'yyyymmdd') dt FROM (SELECT cd , TO_DATE(dt, 'yyyymmdd') dt , TO_DATE('2023' || '01', 'yyyymm') sdt -- 조회년도 FROM t ) , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 4) ;