DB
ORACLE 월요일기준 연주차, 요일, 분기 계산
sucun
2022. 12. 29. 21:47
-- 주차에 속한 일주일 구하기
SELECT '20220101',
TO_CHAR( TO_DATE('20220101','YYYYMMDD') ,'YYYY-IW') AS YW
, TO_CHAR( TO_DATE('20220101','YYYYMMDD') +( 1 - TO_CHAR(TO_DATE('20220101','YYYYMMDD') - 1, 'D') ), 'YYYY-MM-DD') AS START_DATE
, TO_CHAR( TO_DATE('20220101','YYYYMMDD') +( 1 + 6 - TO_CHAR(TO_DATE('20220101','YYYYMMDD') - 1, 'D') ), 'YYYY-MM-DD') AS END_DATE
FROM DUAL;
SELECT TO_CHAR( TO_DATE('20220101','YYYYMMDD') ,'YYYY-IW') AS YW FROM DUAL;
SELECT TO_CHAR( TO_DATE('20220101', 'RRRR-MM-DD'), 'iw' ) FROM DUAL
;
WITH ASD AS (
SELECT
TO_DATE('20221229', 'YYYYMMDD') AS 기준일
, TRUNC(TO_DATE('20221229', 'YYYYMMDD'), 'YY' ) AS 기준일_연초기화
, TRUNC(TO_DATE('20221229', 'YYYYMMDD'), 'MM' ) AS 기준일_월초기화
, TO_CHAR(TRUNC(TO_DATE('20221229', 'YYYYMMDD') ) , 'WW' ) AS 일요일기준_연주차
, TO_CHAR(TRUNC(TO_DATE('20221229', 'YYYYMMDD') ) , 'IW' ) AS 월요일기준_연주차
, LEVEL AS NO
, TO_CHAR(TRUNC(TO_DATE('20220101', 'YYYYMMDD'), 'YY' ) + LEVEL-1, 'YYYY') AS NEW_연
, TO_CHAR(TRUNC(TO_DATE('20220101', 'YYYYMMDD'), 'YY' ) + LEVEL-1, 'YYYY-MM') AS NEW_월
, TO_CHAR(TRUNC(TO_DATE('20220101', 'YYYYMMDD'), 'YY' ) + LEVEL-1, 'YYYYMMDD') AS NEW_일
, TO_DATE(TO_CHAR(TRUNC(TO_DATE('20220101', 'YYYYMMDD'), 'YY' ) + LEVEL-1, 'YYYYMMDD')) AS NEW_일_TODATE
, TO_CHAR(
TO_DATE(TO_CHAR(TRUNC(TO_DATE('20220101', 'YYYYMMDD'), 'YY' ) + LEVEL-1, 'YYYYMMDD') ) -- NEW_DAY
, 'DY') AS NEW_요일
, TO_CHAR(
TO_DATE(TO_CHAR(TRUNC(TO_DATE('20220101', 'YYYYMMDD'), 'YY' ) + LEVEL-1, 'YYYYMMDD') ) -- NEW_DAY
, 'D') AS NEW_요일_숫자 --결과 : 3 (1:일, 2:월, 3:화, 4:수, 5:목, 6:금, 7:토)
FROM DUAL
WHERE 1=1 CONNECT BY LEVEL <= 365*5
)
SELECT
'A' AS A
, NO
, NEW_연
, NEW_월
, NEW_일
, TO_CHAR(TRUNC(TO_DATE(NEW_일 , 'YYYYMMDD') ) , 'IW' ) AS NEW_연주차 -- 월요일기준
, TO_CHAR(NEW_일_TODATE,'W') AS NEW_월주차
, TO_CHAR(NEW_일_TODATE, 'Q') AS 분기
, TO_CHAR(NEW_일_TODATE, 'Q')||'/4' AS 분기점
, CASE WHEN TO_CHAR(NEW_일_TODATE, 'Q') < 3 THEN '상반기' ELSE '후반기' END AS 상반기여부
, NEW_요일
-- , NEW_요일_숫자 --결과 : 3 (1:일, 2:월, 3:화, 4:수, 5:목, 6:금, 7:토) 토일 71
, CASE WHEN NEW_요일_숫자 IN (7,1) THEN '1' ELSE '0' END AS 주말여부 -- 주말 :1 , 평일 : 0
FROM ASD
;
------------------------------------------------------------------------------------------
반응형