해당 주차와, 해당 주차에 해당하는 월의 구분... 0 5 1,552

by 돝돝 [SQL Query] [2016.01.26 18:15:45]


안녕하세요. 요즘 날씨가 춥지요... 단디 입고 다니세용...

 

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월로 출력되도록이요...

by 신이만든짝퉁 [2016.01.26 19:07:58]
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;

 


by 돝돝 [2016.01.26 19:42:08]
SELECT CASE WHEN LAST_DAY(TO_DATE(:AAA)) - NEXT_DAY((LAST_DAY(TO_DATE(:AAA))-7),2) + 1 < 4                               
                 AND TO_DATE(:AAA) <= LAST_DAY(TO_DATE(:AAA)) AND TO_DATE(:AAA) >= NEXT_DAY((LAST_DAY(TO_DATE(:AAA))7),2)
            THEN TO_CHAR(TO_DATE(:AAA), 'MM')                           
            WHEN TO_NUMBER(TO_CHAR(NEXT_DAY((TRUNC(TO_DATE(:AAA),'MM')-1),1),'DD')) < 4                                  
                 AND TO_DATE(:AAA) <= NEXT_DAY((TRUNC(TO_DATE(:AAA),'MM')-1),1)                                          
            THEN
                 TO_CHAR(ADD_MONTHS(TO_DATE(:AAA),-1), 'MM')           
            ELSE TO_CHAR(TO_DATE(:AAA), 'MM')                                             
            END
                 AS YEAR_WEEK_NO
FROM DUAL
로 해결봤습니다. 답변 고맙습니다!

by 돝돝 [2016.01.26 19:50:22]

아 이렇게도... 짱구를 더 굴리는 습관을 가지겠습니다. 고맙습니다.


by 마농 [2016.01.26 19:57:07]
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
        )
;

 


by 마농 [2016.01.26 19:58:51]

실수가 있어서 삭제했는데... 그 사이 답변이 달려 있었네요.

오류 수정하여 다시 올립니다.

+3 부분이 추가 되었습니다.

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