두 날짜 사이의 일수 계산하기
MySQL에서 서로 다른 열에 저장되어 있는 두 날짜 값 사이의 일수를 구하려면 DATEDIFF() 함수를 사용하면 됩니다. 이 함수는 첫 번째 인자의 날짜에서 두 번째 인자의 날짜를 뺀 결과를 일(day) 단위로 반환합니다.
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1471
-> (
-> EmployeeJoiningDate date,
-> EmployeeRelievingDate date
-> );
Query OK, 0 rows affected (0.57 sec)
직원 입사일(EmployeeJoiningDate)과 퇴사일(EmployeeRelievingDate) 두 개의 DATE 타입 열로 구성된 테이블입니다. 이제 insert 명령으로 몇 개의 레코드를 삽입합니다.
mysql> insert into DemoTable1471 values('2018-06-21','2018-12-21');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1471 values('2017-01-19','2019-01-31');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1471 values('2015-12-31','2016-03-01');
Query OK, 1 row affected (0.11 sec)select 문을 사용하여 테이블의 모든 레코드를 확인해 보겠습니다.
mysql> select * from DemoTable1471;
위 쿼리는 다음과 같은 결과를 출력합니다.
+---------------------+-----------------------+
| EmployeeJoiningDate | EmployeeRelievingDate |
+---------------------+-----------------------+
| 2018-06-21 | 2018-12-21 |
| 2017-01-19 | 2019-01-31 |
| 2015-12-31 | 2016-03-01 |
+---------------------+-----------------------+
3 rows in set (0.00 sec)
DATEDIFF 함수로 근무 일수 계산하기
이제 두 날짜 사이의 일수를 계산하는 쿼리를 작성해 보겠습니다. DATEDIFF() 함수의 첫 번째 인자에는 종료일인 EmployeeRelievingDate를, 두 번째 인자에는 시작일인 EmployeeJoiningDate를 순서대로 전달합니다.
mysql> select datediff(EmployeeRelievingDate,EmployeeJoiningDate) as EmployeeWorkDays from DemoTable1471;
실행 결과는 다음과 같습니다.
+------------------+
| EmployeeWorkDays |
+------------------+
| 183 |
| 742 |
| 61 |
+------------------+
3 rows in set (0.00 sec)
결과를 살펴보면 각 직원별 근무 일수가 정상적으로 계산된 것을 확인할 수 있습니다. 참고로 DATEDIFF() 함수는 시간 값은 무시하고 날짜 부분만 비교하므로, 두 날짜의 순서를 반대로 지정하면 음수가 반환됩니다. 따라서 시작일과 종료일의 인자 순서를 항상 주의해서 작성해야 합니다.