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;
반응형
Posted by cocon