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

MySQL에서 TIMESTAMPDIFF() 함수로 두 날짜 간 차이 계산하기

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 명령어를 사용해 몇 개의 레코드를 추가합니다. PunchInTimePunchOutTime 값만 넣으면 되고, 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() 함수를 조합하면 근태 관리, 작업 시간 측정 등 시간 차이를 반복적으로 계산해야 하는 상황에서 매우 유용하게 활용할 수 있습니다.