년, 월, 일 단위로 Row생성하기.. 0 2 8,927

by 동동동 [SQL Query] Oracle 쿼리 [2022.11.21 14:38:05]


안녕하세요...년 또는 월 도는 일 단위로 조건에 따라 Row를 생성 하려고 하는데요...

1
2
3
4
5
6
7
8
9
10
/* 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를 생성하는 좋은 방법이 있을까요??

도움 부탁드립니다.

 

by 마농 [2022.11.21 15:12:05]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
-- 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' -- 시작년
             , '2023' -- 종료년
          FROM dual
        )
 CONNECT BY LEVEL <= e - s + 1
;

 


by 동동동 [2022.11.21 15:44:57]

마농님 감사합니다..^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입