안녕하세요. 요즘 날씨가 춥지요... 단디 입고 다니세용...
SELECT TO_CHAR(TO_DATE('20160101','YYYYMMDD'), 'IW') AS 주차1
, TO_CHAR(TO_DATE('20160102','YYYYMMDD'), 'IW') AS 주차2
, TO_CHAR(TO_DATE('20160103','YYYYMMDD'), 'IW') AS 주차3
, TO_CHAR(TO_DATE('20160104','YYYYMMDD'), 'IW') AS 주차4
FROM DUAL;
을 실행하면
------------------------------------
주차1 주차2 주차3 주차4
53 53 53 1
-------------------------------------
이라는 결과가 나옵니다.
해당 주의 일자가 두 월 (위의 경우는 12월과 1월)에 걸쳐있을 경우에 더 많은 수의 일자를 가지고 있는 일자로 주차가 정해지는데요... 이 때 20160101~20160103 까지의 일자는 12월에 속해있는 주차라고 한다면, 12월로 표현할 수 있는 방법이 있을까요? 20160104부터 1월로 출력되도록이요...
SELECT TO_CHAR(TRUNC(TO_DATE('20151231', 'YYYYMMDD'), 'D'), 'MM') WEEK1 , TO_CHAR(TRUNC(TO_DATE('20160101', 'YYYYMMDD'), 'D'), 'MM') WEEK2 , TO_CHAR(TRUNC(TO_DATE('20160102', 'YYYYMMDD'), 'D'), 'MM') WEEK3 , TO_CHAR(TRUNC(TO_DATE('20160103', 'YYYYMMDD'), 'D'), 'MM') WEEK4 , TO_CHAR(TRUNC(TO_DATE('20160104', 'YYYYMMDD'), 'D'), 'MM') WEEK5 FROM DUAL;
SELECT dt , TO_CHAR(dt, 'dy') dy , TO_CHAR(TRUNC(dt, 'iw') + 3, 'yyyymm') yyyymm , TO_CHAR(dt, 'iw') iw FROM (-- 2014년 -- SELECT TO_DATE('20141228', 'yyyymmdd') + LEVEL - 1 dt FROM dual CONNECT BY LEVEL <= 9 UNION ALL -- 2015년 -- SELECT TO_DATE('20151227', 'yyyymmdd') + LEVEL - 1 dt FROM dual CONNECT BY LEVEL <= 9 ) ;