본문 바로가기

DB-Oracle

oracle 달력출력 쿼리

728x90
반응형

SELECT TA.*
    , ROWNUM AS 월주차
    , TO_NUMBER(TO_CHAR(TO_DATE('201802'||
                                  GREATEST(LPAD(NVL(TA.일,'00'),2,'0')
                                         , LPAD(NVL(TA.월,'00'),2,'0')
                                         , LPAD(NVL(TA.화,'00'),2,'0')
                                         , LPAD(NVL(TA.수,'00'),2,'0')
                                         , LPAD(NVL(TA.목,'00'),2,'0')
                                         , LPAD(NVL(TA.금,'00'),2,'0')
                                         , LPAD(NVL(TA.토,'00'),2,'0'))
                ,'YYYYMMDD')+1, 'iw')) AS 년주차
FROM (SELECT MIN (DECODE (TO_CHAR(ym + LEVEL - 1, 'd'), '1', LEVEL)) 일,
             MIN (DECODE (TO_CHAR(ym + LEVEL - 1, 'd'), '2', LEVEL)) 월,
             MIN (DECODE (TO_CHAR(ym + LEVEL - 1, 'd'), '3', LEVEL)) 화,
             MIN (DECODE (TO_CHAR(ym + LEVEL - 1, 'd'), '4', LEVEL)) 수,
             MIN (DECODE (TO_CHAR(ym + LEVEL - 1, 'd'), '5', LEVEL)) 목,
             MIN (DECODE (TO_CHAR(ym + LEVEL - 1, 'd'), '6', LEVEL)) 금,
             MIN (DECODE (TO_CHAR(ym + LEVEL - 1, 'd'), '7', LEVEL)) 토
      FROM (SELECT TO_DATE ('201802', 'YYYYMM') ym FROM DUAL)
      CONNECT BY LEVEL <= LAST_DAY(ym) - ym + 1
      GROUP BY TRUNC (ym + LEVEL, 'iw')
      ORDER BY 토   
) TA
;

- 프로그램 작업시 빨강글씨에 변수값으로 년월만 던지면 됨.
- 월주차,년주차 추가..

728x90
반응형