MySQL에서 두 개 이상의 열에 저장된 시간 값 사이의 차이를 계산하려면 TIMEDIFF() 함수와 TIME_FORMAT() 함수를 함께 사용하면 됩니다. 아래 예제에서는 직원의 출근 시간, 퇴근 시간, 점심시간이 저장된 테이블에서 실제 근무 시간을 계산하는 과정을 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 출근 시간(PunchIn), 퇴근 시간(PunchOut), 점심시간(Launch)을 저장할 테이블을 생성합니다.
mysql> create table DemoTable
-> (
-> PunchIn time,
-> PunchOut time,
-> Launch time
-> );
Query OK, 0 rows affected (0.50 sec)
2. 샘플 데이터 삽입하기
INSERT 명령을 사용하여 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable values('9:00','6:00','1:00:00');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('9:30','6:10','00:30:00');
Query OK, 1 row affected (0.21 sec)3. 전체 데이터 조회하기
SELECT 문을 사용하여 테이블에 저장된 모든 레코드를 확인합니다.
mysql> select *from DemoTable;
출력 결과
+----------+----------+----------+
| PunchIn | PunchOut | Launch |
+----------+----------+----------+
| 09:00:00 | 06:00:00 | 01:00:00 |
| 09:30:00 | 06:10:00 | 00:30:00 |
+----------+----------+----------+
2 rows in set (0.00 sec)
4. 시간 차이를 계산하는 쿼리
정확한 근무 시간을 계산하는 쿼리는 다음과 같습니다. 내부의 TIMEDIFF()로 출근 시간과 퇴근 시간의 차이를 먼저 구한 뒤, 그 결과에서 점심시간을 다시 차감하는 방식입니다.
mysql> SELECT TIME_FORMAT(TIMEDIFF(TIMEDIFF(PunchIn,PunchOut), Launch), '%H:%i') as TimeDiff from DemoTable;
출력 결과
+----------+
| TimeDiff |
+----------+
| 02:00 |
| 02:50 |
+----------+
2 rows in set (0.00 sec)
쿼리 동작 원리
TIMEDIFF(PunchIn, PunchOut) — 출근 시간과 퇴근 시간의 차이를 계산합니다.
TIMEDIFF(결과값, Launch) — 앞에서 구한 시간 차이에서 점심시간(Launch)을 차감하여 순수 근무 시간을 구합니다.
TIME_FORMAT(결과값, '%H:%i') — 최종 결과를 '시:분' 형식으로 깔끔하게 출력합니다.
이처럼 TIMEDIFF() 함수를 중첩해서 사용하면 여러 열에 나눠 저장된 시간 값을 손쉽게 가감할 수 있으며, TIME_FORMAT()을 조합하면 원하는 출력 형식으로 결과를 표현할 수 있습니다.