달력을 짜는 도중에... 0 2 3,358

by 파이팅마모루 [SQL Query] mamoru83 [2010.11.05 10:20:14]


SELECT TO_CHAR(t_date, 'yyyy'), TO_CHAR(t_date, 'MM'), TO_CHAR(t_date+1, 'IW'),
       MAX(DECODE(TO_CHAR(t_date,'D'), '1', TO_CHAR(t_date,'dd'))) as 일,
       MAX(DECODE(TO_CHAR(t_date,'D'), '2', TO_CHAR(t_date,'dd'))) as 월,
       MAX(DECODE(TO_CHAR(t_date,'D'), '3', TO_CHAR(t_date,'dd'))) as 화,
       MAX(DECODE(TO_CHAR(t_date,'D'), '4', TO_CHAR(t_date,'dd'))) as 수,
       MAX(DECODE(TO_CHAR(t_date,'D'), '5', TO_CHAR(t_date,'dd'))) as 목,
       MAX(DECODE(TO_CHAR(t_date,'D'), '6', TO_CHAR(t_date,'dd'))) as 금,
       MAX(DECODE(TO_CHAR(t_date,'D'), '7', TO_CHAR(t_date,'dd'))) as 토
FROM ( SELECT to_date('201010'||'01', 'yyyyMMdd') + rownum -1 AS t_date
       FROM dba_indexes
       WHERE to_date('201010'||'01', 'yyyyMMdd') + rownum - 1 < to_date('201103', 'yyyyMM') )
GROUP BY TO_CHAR(t_date, 'yyyy'), TO_CHAR(t_date, 'MM'), TO_CHAR(t_date+1, 'IW')
ORDER BY TO_CHAR(t_date, 'yyyy'), TO_CHAR(t_date, 'MM'), TO_CHAR(t_date+1, 'IW') ASC;

이런식으로 달력을만드는 쿼리를 짰습니다.

그런데 2011-01-01이 문제가 됐습니다. 주차가 53주차로 들어가 버린거죠...
이거 어떻게 해결해야 할지 막막하네요... 년도가 바뀌는 부분에서 토요일만 아니면
되는데 그게 딱 걸려서 답답하네요..

어떤식으로 해결해야 할지 막막하네요... 도움좀 부탁드리겠습니다.
by 마농 [2010.11.05 10:51:31]
TO_CHAR(t_date+1, 'IW') 대신에 TRUNC(t_date+1, 'IW') 를 사용하세요.

by 파이팅마모루 [2010.11.05 13:27:42]
마농님 매번 감사드립니다. :)
회사컴터에서 포맷하고 하느라 아직 실행은 못해봤네요.
TRUNC 함수에 대해서 더 찾아봐야 겠네요.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입