1 2 3 4 5 6 7 8 9 10 11 | SELECT LEVEL BETWEEN_DT , TO_CHAR(START_DATE + LEVEL * 7 - 7, 'WW' ) WEEK , TO_CHAR(START_DATE + LEVEL * 7 - 7, 'yyyy-mm-dd' ) SDT , TO_CHAR(START_DATE + LEVEL * 7 - 1, 'yyyy-mm-dd' ) EDT FROM ( SELECT TRUNC(TO_DATE( '2022-11-13' ), 'd' ) START_DATE , TRUNC(TO_DATE( '2023-02-05' ), 'd' ) END_DATE , (TRUNC(TO_DATE( '2023-02-05' ), 'd' ) - TRUNC(TO_DATE( '2022-11-13' ), 'd' )) / 7 + 1 BETWEEN_DT FROM DUAL ) CONNECT BY LEVEL <= BETWEEN_DT |
이렇게 해 봤는데 주의 시작 기준이 일요일이 아닌게 문제인것 같네요. ㅠㅠ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | -- 일요일을 시작일로 하여 시작일의 WW 를 가져오면 문제가 없을 듯 합니다. SELECT lv , (sdt - NEXT_DAY(TRUNC(sdt, 'yyyy' ) - 1, 1)) / 7 + 1 ww_1 , TO_CHAR(sdt, 'ww' ) ww_2 , TO_CHAR(sdt, 'yyyy-mm-dd' ) sdt , TO_CHAR(edt, 'yyyy-mm-dd' ) edt FROM ( SELECT LEVEL lv , sdt + LEVEL *7 - 7 sdt , sdt + LEVEL *7 - 1 edt FROM ( SELECT TRUNC(TO_DATE( '2022-11-13' , 'yyyy-mm-dd' ), 'd' ) sdt , TRUNC(TO_DATE( '2023-02-05' , 'yyyy-mm-dd' ), 'd' ) edt FROM dual ) CONNECT BY LEVEL <= (edt - sdt) / 7 + 1 ) ; |