오라클로 달력 만드는 쿼리 질문이 있습니다!!! 0 2 2,491

by 홍2 [Oracle 기초] oracle oracle달력 oracle쿼리 [2022.08.30 14:10:20]


오라클 쿼리로 달력을 만들었는데 
시작달과 마지막달을 지정해주고 그 값들중에 홀수 달만 출력, 짝수 달만 출력을 하고 싶은데
에러가 납니다 ㅜ.. 
시작달과 마지막달까지는 했는데 홀 짝 나오게가 너무 어렵습니다.. 도와주세요 ㅜ
파라미터 세개 넣어서 받으려고 하는데 여기서 너무 막히네요....


-- 홀, 짝
SELECT DECODE(MIN(D_ID),1,Y_ID) 날짜
      ,MIN(DECODE(W_ID,1,D_ID)) 일
      ,MAX(DECODE(W_ID,2,D_ID)) 월
      ,SUM(DECODE(W_ID,3,D_ID)) 화
      ,MIN(DECODE(W_ID,4,D_ID)) 수
      ,MIN(DECODE(W_ID,5,D_ID)) 목
      ,MIN(DECODE(W_ID,6,D_ID)) 금
      ,MIN(DECODE(W_ID,7,D_ID)) 토
FROM (
SELECT TO_CHAR(TO_DATE(:V_ST,'YYYY-MM') + ROWNUM-1,'YYYY-MM') Y_ID
	  ,EXTRACT(DAY FROM TO_DATE(:V_ST,'YYYY-MM') + ROWNUM-1) D_ID 
      ,TO_CHAR(TO_DATE(:V_ST,'YYYYMM')+ROWNUM-1,'D') W_ID
      ,TRUNC(TO_DATE(:V_ST,'YYYYMM')+ROWNUM-1,'D') WK_ID
      ,MOD(TO_CHAR(FIRST_DAY -1 + ROWNUM , 'MM'),2) AS NUM
FROM 
(SELECT TRUNC(TO_DATE(:V_ST,'YYYYMM'), 'MM') FIRST_DAY 
        FROM DUAL) 
CONNECT BY LEVEL <= LAST_DAY(TO_DATE(:V_ET,'YYYYMM')) - TO_DATE(:V_ST,'YYYYMM')+1  
)
FROM DUAL
WHERE NUM = :NUM
GROUP BY Y_ID, WK_ID
ORDER BY Y_ID, WK_ID; 

 

by 마농 [2022.08.30 14:42:20]

오류는. 밑에서 4번째 줄 " FROM DUAL " 부분만 빼시면 됩니다.
변수는 한번만 사용하도록 하는게 좋을 듯 합니다.
쿼리를 좀더 간결하게 바꾸시는게 좋을 듯 하네요.

SELECT MIN(DECODE(d_id, 1, y_id)) 연월
     , MIN(DECODE(w_id, 1, d_id)) 일
     , MIN(DECODE(w_id, 2, d_id)) 월
     , MIN(DECODE(w_id, 3, d_id)) 화
     , MIN(DECODE(w_id, 4, d_id)) 수
     , MIN(DECODE(w_id, 5, d_id)) 목
     , MIN(DECODE(w_id, 6, d_id)) 금
     , MIN(DECODE(w_id, 7, d_id)) 토
  FROM (SELECT TO_CHAR(dt, 'yyyy-mm') y_id
             , TO_CHAR(dt, 'fmdd')    d_id
             , TO_CHAR(dt, 'd')       w_id
             , TRUNC  (dt, 'd')      wk_id
          FROM (SELECT st + LEVEL - 1 dt
                  FROM (SELECT TO_DATE(:v_st, 'yyyymm') st
                             , TO_DATE(:v_et, 'yyyymm') et
                          FROM dual)
                 CONNECT BY LEVEL <= LAST_DAY(et) - st + 1
                )
         WHERE MOD(TO_CHAR(dt, 'mm'), 2) = :v_num
        )
 GROUP BY y_id, wk_id
 ORDER BY y_id, wk_id
;

 


by 홍2 [2022.08.30 14:48:24]

와!! 진짜 이렇게 깔끔하고 간단하게 되는거였구나...

감사합니다!!!

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