WITH CAL AS (
SELECT
BASE_YM
--,TODAY
,W1_START_DAY
,W1_END_DAY
,W2_START_DAY
,W2_END_DAY
,W3_START_DAY
,W3_END_DAY
,W4_START_DAY
,W4_END_DAY
,W5_START_DAY
,W5_END_DAY
,TO_DATE(W5_END_DAY, 'YYYYMMDD')-TO_DATE(W5_START_DAY, 'YYYYMMDD')+1 AS W5_DAY_DIFF
,TO_DATE(W5_END_DAY , 'YYYYMMDD')-TO_DATE(W1_START_DAY, 'YYYYMMDD')+1 AS MON_DAY_CNT
FROM (
SELECT
TO_CHAR (FIRST_DAY + LEVEL - 1, 'YYYYMMDD') TODAY -- 해당일자
, TO_CHAR (FIRST_DAY + LEVEL - 1, 'YYYYMM')+1 AS BASE_YM -- 해당일자
, TO_CHAR(TO_DATE(TO_CHAR (FIRST_DAY + LEVEL - 1, 'YYYYMMDD'), 'YYYYMMDD'), 'YYYYMMDD') AS W1_START_DAY -- 해당일자str
, TO_CHAR(TO_DATE(TO_CHAR (FIRST_DAY + LEVEL - 1, 'YYYYMMDD'), 'YYYYMMDD')+(7*1)-1, 'YYYYMMDD') AS W1_END_DAY -- 해당일자str
, TO_CHAR(TO_DATE(TO_CHAR (FIRST_DAY + LEVEL - 1, 'YYYYMMDD'), 'YYYYMMDD')+(7*1), 'YYYYMMDD') AS W2_START_DAY -- 해당일자str
, TO_CHAR(TO_DATE(TO_CHAR (FIRST_DAY + LEVEL - 1, 'YYYYMMDD'), 'YYYYMMDD')+(7*2)-1, 'YYYYMMDD') AS W2_END_DAY -- 해당일자str
, TO_CHAR(TO_DATE(TO_CHAR (FIRST_DAY + LEVEL - 1, 'YYYYMMDD'), 'YYYYMMDD')+(7*2), 'YYYYMMDD') AS W3_START_DAY -- 해당일자str
, TO_CHAR(TO_DATE(TO_CHAR (FIRST_DAY + LEVEL - 1, 'YYYYMMDD'), 'YYYYMMDD')+(7*3)-1, 'YYYYMMDD') AS W3_END_DAY -- 해당일자str
, TO_CHAR(TO_DATE(TO_CHAR (FIRST_DAY + LEVEL - 1, 'YYYYMMDD'), 'YYYYMMDD')+(7*3), 'YYYYMMDD') AS W4_START_DAY -- 해당일자str
, TO_CHAR(TO_DATE(TO_CHAR (FIRST_DAY + LEVEL - 1, 'YYYYMMDD'), 'YYYYMMDD')+(7*4)-1, 'YYYYMMDD') AS W4_END_DAY -- 해당일자str
, TO_CHAR(TO_DATE(TO_CHAR (FIRST_DAY + LEVEL - 1, 'YYYYMMDD'), 'YYYYMMDD')+(7*4), 'YYYYMMDD') AS W5_START_DAY -- 해당일자str
, TO_CHAR(TO_DATE(TO_CHAR (FIRST_DAY + LEVEL - 1, 'YYYYMMDD'), 'YYYYMMDD')+(7*4)-1, 'YYYYMM')||'25' AS W5_END_DAY -- 해당일자str
FROM (SELECT TO_DATE('20230101') AS FIRST_DAY FROM DUAL)
WHERE TO_CHAR (FIRST_DAY + LEVEL - 1, 'DD')='26'
CONNECT BY TO_DATE('20230201') + LEVEL + 1 <= TRUNC(LAST_DAY(TO_DATE('20230331', 'YYYYMMDD')))
) TBL
)
SELECT * FROM CAL;