안녕하세요...년 또는 월 도는 일 단위로 조건에 따라 Row를 생성 하려고 하는데요...
/* 1.일단위 */
SELECT TO_CHAR(SDT + LEVEL - 1, 'YYYY-MM-DD') WORK_DY
FROM (SELECT TO_DATE('20221001', 'YYYY-MM-DD') SDT -- 시작일
, TO_DATE('20221121', 'YYYY-MM-DD') EDT -- 종료일
FROM DUAL
)
CONNECT BY LEVEL <= EDT - SDT + 1
;
다음과 같이 일 단위인 경우 10월1일 부터 11월21일 까지 생성하는데...
월 단위 (2022-10, 2022-11) 또는 년단위 (2022) 로 주어진 기간에 따라 Row를 생성하는 좋은 방법이 있을까요??
도움 부탁드립니다.
-- 1. 일단위
SELECT TO_CHAR(s + LEVEL - 1, 'yyyy-mm-dd') work_dy
FROM (SELECT TO_DATE('20221001', 'yyyymmdd') s -- 시작일
, TO_DATE('20221121', 'yyyymmdd') e -- 종료일
FROM dual
)
CONNECT BY LEVEL <= e - s + 1
;
-- 2. 월단위
SELECT TO_CHAR(ADD_MONTHS(s, LEVEL - 1), 'yyyy-mm') work_ym
FROM (SELECT TO_DATE('202210', 'yyyymm') s -- 시작년월
, TO_DATE('202211', 'yyyymm') e -- 종료년월
FROM dual
)
CONNECT BY LEVEL <= MONTHS_BETWEEN(e, s) + 1
;
-- 3. 연단위
SELECT TO_CHAR(s + LEVEL - 1) work_yy
FROM (SELECT '2022' s -- 시작년
, '2023' e -- 종료년
FROM dual
)
CONNECT BY LEVEL <= e - s + 1
;