반응형
2023년 근무일수을 알 수 있는 sql문입니다.
1주차는 1월 2일 월요일에 시작합니다.
한국의 공휴일을 기준으로 공휴일은 제외됩니다.
DECLARE @StartDate DATE = '2023-01-02';
DECLARE @EndDate DATE = '2023-12-31';
WITH cte AS (
SELECT @StartDate AS WorkDay, DATENAME(WEEKDAY, @StartDate) AS WeekDay
UNION ALL
SELECT DATEADD(DAY, 1, WorkDay), DATENAME(WEEKDAY, DATEADD(DAY, 1, WorkDay))
FROM cte
WHERE WorkDay < @EndDate
)
SELECT COUNT(*) AS WorkingDays
FROM cte
WHERE WeekDay = 'Monday'
AND WorkDay NOT IN (
'2023-01-02', -- New Year's Day
'2023-02-01', -- Lunar New Year's Day
'2023-02-02', -- Lunar New Year's Day
'2023-02-03', -- Lunar New Year's Day
'2023-03-01', -- Independence Movement Day
'2023-05-05', -- Children's Day
'2023-05-22', -- Buddha's Birthday
'2023-06-06', -- Memorial Day
'2023-08-15', -- Liberation Day
'2023-09-20', -- Chuseok (Mid-Autumn Festival) Day
'2023-09-21', -- Chuseok (Mid-Autumn Festival) Day
'2023-09-22', -- Chuseok (Mid-Autumn Festival) Day
'2023-10-03' -- National Foundation Day
)
쿼리는 2023년 1월 2일부터 2023년 12월 31일 사이의 모든 날짜 목록을 생성하기 위해 공통 테이블 식(CTE)을 사용합니다. CTE는 @StartDate 값으로 시작하여 @EndDate에 도달할 때까지 한 번에 하루씩 재귀적으로 추가합니다.
그런 다음 주 쿼리는 한국의 휴일을 기준으로 휴일이 아닌 월요일인 CTE의 일 수를 카운트합니다. 휴일은 메인 쿼리의 WHERE 절에 있는 NOT IN 절을 사용하여 제외됩니다.
이 쿼리에 포함된 휴일은 2023년 한국 달력을 기준으로 하며, 다른 해에는 정확하지 않을 수 있습니다. 또한 이 쿼리는 주말에 사무실이 쉰다고 가정합니다. 사무실이 주말에 열려 있는 경우 WHERE 절에서 Week Day = 'Monday' 조건을 제거할 수 있습니다.
반응형
'Tool' 카테고리의 다른 글
[노션] 표 토클 활용한 회의록 겸 아카이빙 만들기 (1) (0) | 2023.03.10 |
---|---|
[스프레드시트] 많은 데이터 오류 해결 방법 (0) | 2023.03.08 |
[스프레드 시트] 오늘 날짜에 따른 주차 자동 생성 수식 (0) | 2023.03.04 |
[노션] API 연결 (0) | 2023.02.24 |
[노션] 수식 - 간단한 날짜 요일 표시 수식 (0) | 2023.02.20 |