-- "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
);