급여를 계산하려면 두 날짜 사이의 차이, 즉 해당 기간의 근무 일수를 구해야 하는 경우가 많습니다. 예를 들어 입사일(JoinDate)부터 종료일(EndDate)까지의 일수를 구하고, 일당이 300원이라고 가정하면 20일 근무 시 급여는 6,000원, 27일 근무 시에는 8,100원이 됩니다.
이번 글에서는 MySQL의 DATEDIFF() 함수를 활용해 날짜 차이를 구하고, 여기에 일당을 곱하여 급여를 계산하는 방법을 단계별로 살펴보겠습니다.
1단계: 테이블 생성
예제 진행에 앞서 먼저 테이블을 생성하겠습니다.
mysql> create table DemoTable
-> (
-> JoinDate date,
-> EndDate date
-> ,
-> Value int
-> );
Query OK, 0 rows affected (1.16 sec)
2단계: 데이터 삽입
INSERT 명령어를 사용해 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable values('2019-01-01','2019-01-31',500);
Query OK, 1 row affected (0.37 sec)
mysql> insert into DemoTable values('2019-02-12','2019-02-25',900);
Query OK, 1 row affected (0.22 sec)3단계: 데이터 조회
SELECT 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable;
출력 결과
실행하면 다음과 같은 결과가 출력됩니다.
+------------+-------------+-------+
| JoinDate | EndDate | Value |
+------------+-------------+-------+
| 2019-01-01 | 2019-01-31 | 500 |
| 2019-02-12 | 2019-02-25 | 900 |
+------------+-------------+-------+
2 rows in set (0.00 sec)
4단계: 급여 계산 쿼리 실행
다음은 실제 급여를 계산하는 쿼리입니다. 날짜 차이를 구할 때는 DATEDIFF() 함수를 사용합니다.
mysql> select ABS(DATEDIFF(JoinDate,EndDate) * Value) AS Total from DemoTable;
출력 결과
위 쿼리를 실행하면 각 행별로 근무 일수 × 일당이 계산된 급여 합계가 출력됩니다.
+-------+
| Total |
+-------+
| 15000 |
| 11700 |
+-------+
2 rows in set (0.14 sec)
핵심 포인트 정리
DATEDIFF() 함수는 첫 번째 인자에서 두 번째 인자의 날짜를 빼서 일수 차이를 반환합니다. 이때 날짜 순서에 따라 음수 값이 나올 수 있는데, 예제에서는 ABS() 함수로 절댓값을 취해 항상 양수가 되도록 처리했습니다. 이처럼 DATEDIFF()와 산술 연산만 조합하면 별도의 애플리케이션 로직 없이 SQL 쿼리 하나로 근무 일수 기반 급여를 손쉽게 계산할 수 있습니다.