Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 날짜 차이(DATEDIFF)로 급여 계산하는 방법

급여를 계산하려면 두 날짜 사이의 차이, 즉 해당 기간의 근무 일수를 구해야 하는 경우가 많습니다. 예를 들어 입사일(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 쿼리 하나로 근무 일수 기반 급여를 손쉽게 계산할 수 있습니다.