SQL Server 기준으로 작성되었습니다.
이 쿼리는 특정 입사 날짜(@v_enterDate)부터 오늘 날짜까지의 근무 기간을 년, 월, 일로 계산합니다. HR 관련 시스템이나 근무 기간을 쿼리로 계산해고 싶은 분들은 다양한 응용 프로그램에서 사용할 수 있습니다.
SQL을 이용한 근무 기간 계산하기
근무 기간을 정확히 계산하는 것은 인사 관리, 급여 계산, 휴가 정산 등 많은 HR 관련 업무에서 중요한 부분입니다. 오늘은 SQL 쿼리를 이용해 특정 입사 날짜로부터 오늘까지의 근무 기간을 년, 월, 일 단위로 계산하는 방법에 대해 알아보겠습니다.
사용된 SQL 함수
- DATEDIFF: 두 날짜 사이의 차이를 계산합니다.
- MONTH, DAY: 각각 날짜에서 월과 일을 추출합니다.
- CONVERT: 데이터 타입을 변환합니다.
- GETDATE(): 현재 시스템의 날짜와 시간을 반환합니다.
쿼리 설명
먼저, DECLARE 문을 사용하여 입사 날짜를 변수 @v_enterDate에 할당합니다. 이 예제에서는 20210813로 설정하였습니다.
DECLARE @v_enterDate VARCHAR(8) = '20210813';
근무 기간의 년(empYear), 월(empMonth), 일(empDay)을 계산하기 위한 로직은 다음과 같습니다.
SELECT
DATEDIFF(YY, A.START_WORK_DT, A.TODAY_DT)
- CASE
WHEN MONTH(A.START_WORK_DT) > MONTH(A.TODAY_DT)
OR (MONTH(A.START_WORK_DT) = MONTH(A.TODAY_DT) AND DAY(A.START_WORK_DT) > DAY(A.TODAY_DT))
THEN 1
ELSE 0
END AS empYear,
(DATEDIFF(M, A.START_WORK_DT, A.TODAY_DT) % 12)
- CASE
WHEN DAY(A.START_WORK_DT) > DAY(A.TODAY_DT)
THEN 1
ELSE 0
END AS empMonth,
CASE
WHEN DAY(A.START_WORK_DT) > DAY(A.TODAY_DT)
THEN DATEDIFF(D, DATEADD(M, -1, A.TODAY_DT), A.TODAY_DT) - (DAY(A.START_WORK_DT) - DAY(A.TODAY_DT))
ELSE DAY(A.TODAY_DT) - DAY(A.START_WORK_DT)
END AS empDay
FROM (
SELECT
'입사날짜' AS START_WORK,
CONVERT(DATETIME, @v_enterDate) AS START_WORK_DT,
'현재날짜' AS TODAY,
CONVERT(DATETIME, CONVERT(CHAR(8), GETDATE(), 112)) AS TODAY_DT
) A
연 차이 계산
DATEDIFF(YY, START_WORK_DT, TODAY_DT)는 두 날짜 간의 연 차이를 계산합니다. 그 후, 시작 월이 현재 월보다 크거나 같고 시작 일이 현재 일보다 큰 경우 연수에서 1을 빼서 정확한 연수를 조정합니다.
월 차이 계산
DATEDIFF(M, START_WORK_DT, TODAY_DT) % 12는 전체 월 수에서 12로 나눈 나머지를 구하여 경과된 월 수를 계산합니다. 만약 시작 일이 현재 일보다 크다면, 월 수에서 1을 빼서 조정합니다.
일 차이 계산
여기서는 시작 일이 현재 일보다 클 경우와 작거나 같을 경우를 나누어 계산합니다. 윤월의 경우에도 DATEDIFF와 DATEADD 함수를 사용하여 정확한 일수 차이를 계산합니다.
결과 예시
+----------------------------------------------------------------+
| empYear empMonth empDay |
+----------------------------------------------------------------+
| 2 9 0 |
+----------------------------------------------------------------+
'데이터베이스 (DB)' 카테고리의 다른 글
원온원(1on1) 미팅 관리 시스템: 설계 및 구현 가이드 (0) | 2024.11.07 |
---|---|
테이블 정보 조회하기, Table Description 쿼리 (0) | 2024.10.25 |
저장 프로시저 내용 검색하기 (1) | 2024.10.08 |
Firebase 프로젝트 진행하기 (0) | 2024.05.06 |
[DB] 서브쿼리(Subquery)? (0) | 2023.07.17 |