1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | -- "XXXX월 XX월 X째주"를 출력하는 쿼리. -- 단, 이전달과 다음달이 이어지는 마지막 주의 경우, 평일 5일중 3일 이상이 속해있는 달로 치환되어야 하는 경우. -- (ex. '2017-12-01' => 2017년 11월 5째주 / '2015-01-01' => 2014년 12월 5째주 로 출력되어야 함) -- -- -- 무조건 평일 5일중 3일 이상이 속해있는 달로 치환되어야 하기 때문에, 어떤 날짜를 파라미터로 넣어도 -- 그 날짜가 속해있는 목요일의 날짜를 뽑도록 하여 기준을 잡았다. -- => ㄱ) 해당 날짜가 속해있는 수요일의 날짜가 (DD가) 2보다 작을 때 (다음 달이 될 날짜들이 평일 5일중 3일 이상일 때) -- 다음 달의 첫번째 주차 (1주차)로 끼워넣음 SELECT YYYYMM || JJA || '째주' AS WEEKLY_DT FROM (SELECT CASE WHEN TO_CHAR(TODAY_DATE, 'DD') < 02 THEN SUBSTR(TO_CHAR(ADD_MONTHS(TODAY_DATE, -1), 'YYYY-MM-DD'), 0, 4) || '년 ' || SUBSTR(TO_CHAR(ADD_MONTHS(TODAY_DATE, -1), 'YYYYMMDD'), 5, 2) || '월 ' ELSE SUBSTR(TO_CHAR(TODAY_DATE, 'YYYY-MM-DD'), 0, 4) || '년 ' || SUBSTR(TO_CHAR(TODAY_DATE, 'YYYYMMDD'), 5, 2) || '월 ' END AS YYYYMM, CASE WHEN TO_CHAR(TODAY_DATE, 'DD') < 02 THEN TO_CHAR(TRUNC(TODAY_DATE -1, 'IW'), 'W') ELSE TO_CHAR(TODAY_DATE, 'W') END AS JJA -- 그 날짜가 속해있는 목요일의 날짜를 뽑는 쿼리 FROM (SELECT TRUNC(TO_DATE(#params#, 'YYYY-MM-DD'), 'IW') + LEVEL + 2 AS TODAY_DATE FROM DUAL CONNECT BY LEVEL <= 1 ) WED_DAY ); | cs |
'BackEnd > DBMS' 카테고리의 다른 글
Oracle :: NVL() vs NVL2() vs DECODE() vs NULLIF() vs COALESCE() 함수 비교 (0) | 2018.01.11 |
---|---|
Oracle :: 데이터 사전 (Data Dictionary) (0) | 2018.01.11 |
Oracle :: 해당 파라미터로 받는 날짜의 다음날 + 요일을 출력하는 쿼리 (주말 제외) (0) | 2017.12.12 |
Oracle :: 계층형 구조 (Hierarchical Query) (0) | 2017.11.06 |
Oracle :: REGEXP_REPLACE (문자열 끼워넣기) (0) | 2017.09.27 |