SELECT '20120105' 시작일, '20120420' 종료일, 'A' 구분 FROM dual
UNION ALL
SELECT '20120421' 시작일, '20130702' 종료일, 'B' 구분 FROM dual
UNION ALL
SELECT '20130703' 시작일, '20140904' 종료일, 'C' 구분 FROM dual
시작일 | 종료일 | 구분
20120105 20120420 A
20120421 20130702 B
20130703 20140904 C
위와 같은 데이타를 '년말'이 껴있는 경우 아래와 같이 만들고 싶습니다.
시작일 | 종료일 | 구분
20120105 20120420 A
20120421 20121231 B
20130101 20130702 B
20130703 20131231 C
20140101 20140904 C
계속 고민중인데 한방쿼리로 쉽게 떠오르지가 않네요
고수님들의 가르침 부탁드립니다 (__)
WITH t AS ( SELECT '20120105' sdt, '20120420' edt, 'A' gb FROM dual UNION ALL SELECT '20120421', '20130702', 'B' FROM dual UNION ALL SELECT '20130703', '20140904', 'C' FROM dual ) SELECT GREATEST(sdt, SUBSTR(sdt, 1, 4) + lv - 1 || '0101') sdt , LEAST (edt, SUBSTR(sdt, 1, 4) + lv - 1 || '1231') edt , gb FROM t , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 9) WHERE lv <= SUBSTR(edt, 1, 4) - SUBSTR(sdt, 1, 4) + 1 ORDER BY gb, lv ;