본문 바로가기

개발 관련 기록과 정리/SQL

공휴일 및 주말 처리

INSERT INTO CMPHOL
(CORPCD
,PLACCD
,CMPDAT
,HOLGBN)
SELECT * FROM (
WITH SUB_DATES AS (
SELECT 
	TM.DATES -- 날짜
	,TM.DAYS -- 요일
	,CASE WHEN TM.DAYS = '1' OR TM.DAYS = '7' THEN 'Y' ELSE 'N' END DAYGBN -- 휴일구분
FROM (	SELECT TO_CHAR(START_DT, 'YYYY-MM-DD') DATES -- 날짜
				,TO_CHAR(START_DT, 'D') DAYS -- 요일
		FROM (	SELECT TO_DATE(TO_CHAR(TO_DATE('20230101','YYYYMMDD') + (LEVEL-1), 'YYYY-MM-DD')) AS START_DT -- 한해날짜
				FROM DUAL 
				CONNECT BY LEVEL <= (TO_DATE('20231231','YYYYMMDD')-TO_DATE('20230101','YYYYMMDD')+1) 
			) A
	) TM
ORDER BY TM.DATES ASC
)
, SUB_HOLDAT AS (
SELECT A.DATES -- 날짜
		,CASE WHEN (SELECT 'Y' AS DAYGBN FROM HOLDAY B WHERE B.HOLDAT > '2023-01-01' AND B.HOLDAT = A.DATES) IS NULL THEN A.DAYGBN ELSE 'Y' END DAYGBN -- 최종휴일구분
FROM SUB_DATES A
)
, SUB_COMPIF AS (
SELECT CORPCD -- 법인코드
, PLACCD -- 사업장코드
FROM COPMST 
GROUP BY CORPCD, PLACCD
)
SELECT A.CORPCD, A.PLACCD, B.DATES, B.DAYGBN
FROM SUB_COMPIF A
JOIN SUB_HOLDAT B ON 1=1 -- 조인 조건을 걸지 않는 방법
ORDER BY A.CORPCD, A.PLACCD, B.DATES ASC
) A
ORDER BY A.CORPCD, A.PLACCD, A.DATES ASC

전자 정부 API에서 습득한 공휴일 정보와 조합해서 DB에 저장

'개발 관련 기록과 정리 > SQL' 카테고리의 다른 글

오라클 정규식을 통한 전화번호 가공  (0) 2023.09.12
오라클 삭제된 데이터 찾기  (0) 2023.09.12
오라클 UPDATE SELECT 정리  (0) 2023.09.12
날짜 처리  (0) 2023.09.12