MySQL의 TIMESTAMPDIFF() 함수는 두 날짜 또는 날짜·시간(datetime) 표현식 사이의 차이를 계산할 때 사용합니다. 이번 글에서는 출근 시간과 퇴근 시간을 저장한 뒤, 두 시각의 차이를 초 단위로 자동 계산해주는 테이블을 만들어 보겠습니다.
1. 테이블 생성
먼저 PunchInTime(출근 시간)과 PunchOutTime(퇴근 시간) 컬럼을 가진 테이블을 생성합니다. 여기서 핵심은 Details라는 생성된 열(Generated Column)입니다. 이 열은 데이터가 입력될 때마다 TIMESTAMPDIFF()와 ABS() 함수를 통해 두 시간의 차이를 초 단위로 자동 계산하여 저장합니다.
mysql> create table DemoTable665(
PunchInTime datetime,
PunchOutTime datetime,
Details INT(11) AS (ABS(TIMESTAMPDIFF(second,PunchInTime,PunchOutTime)))
)ENGINE=MyISAM;
Query OK, 0 rows affected (0.23 sec)
2. 데이터 삽입
INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다. PunchInTime과 PunchOutTime 값만 넣으면 되고, Details 값은 자동으로 계산되므로 직접 입력할 필요가 없습니다.
mysql> insert into DemoTable665(PunchInTime,PunchOutTime) values('2019-09-21 9:30:10','2019-09-21 04:34:56');
Query OK, 1 row affected (0.05 sec)
mysql> insert into DemoTable665(PunchInTime,PunchOutTime) values('2019-11-11 10:00:20','2019-11-11 05:30:16');
Query OK, 1 row affected (0.04 sec)3. 결과 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable665;
실행 결과는 다음과 같습니다.
+---------------------+---------------------+---------+
| PunchInTime | PunchOutTime | Details |
+---------------------+---------------------+---------+
| 2019-09-21 09:30:10 | 2019-09-21 04:34:56 | 17714 |
| 2019-11-11 10:00:20 | 2019-11-11 05:30:16 | 16204 |
+---------------------+---------------------+---------+
2 rows in set (0.00 sec)
결과 해석
출력 결과를 보면 Details 열에 두 시간의 차이가 초 단위로 저장된 것을 확인할 수 있습니다. 예를 들어 첫 번째 행은 17,714초(약 4시간 55분)의 차이를 나타냅니다. ABS() 함수를 함께 사용했기 때문에 출근 시간과 퇴근 시간의 순서가 바뀌더라도 항상 양수 값이 반환됩니다.
이처럼 생성된 열과 TIMESTAMPDIFF() 함수를 조합하면 근태 관리, 작업 시간 측정 등 시간 차이를 반복적으로 계산해야 하는 상황에서 매우 유용하게 활용할 수 있습니다.