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;
오류는. 밑에서 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 ;