MySQL에서 두 시간 값의 차이를 초 단위로 변환하려면 TIME_TO_SEC() 함수를 활용하면 됩니다. TIME_TO_SEC()는 시간 값을 초로 변환해 주는 함수로, TIMEDIFF() 함수와 함께 사용하면 두 시간 사이의 차이를 손쉽게 초 단위로 계산할 수 있습니다.
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
-> (
-> SourceTime time,
-> DestinationTime time
-> );
Query OK, 0 rows affected (1.33 sec)
insert 명령을 사용하여 테이블에 레코드를 몇 개 삽입합니다.
mysql> insert into DemoTable values('10:20:00','4:50:54');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('12:05:10','7:45:12');
Query OK, 1 row affected (0.30 sec)
select 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
출력 결과
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+------------+-----------------+ | SourceTime | DestinationTime | +------------+-----------------+ | 10:20:00 | 04:50:54 | | 12:05:10 | 07:45:12 | +------------+-----------------+ 2 rows in set (0.00 sec)
다음은 시간 차이를 초 단위로 변환하는 쿼리입니다.
mysql> SELECT ABS(TIME_TO_SEC(timediff(DestinationTime, SourceTime))) from DemoTable;
출력 결과
실행 결과는 다음과 같습니다.
+---------------------------------------------------------+ | ABS(TIME_TO_SEC(timediff(DestinationTime, SourceTime))) | +---------------------------------------------------------+ | 19746 | | 15598 | +---------------------------------------------------------+ 2 rows in set (0.00 sec)
쿼리 동작 원리
위 쿼리가 동작하는 방식을 단계별로 살펴보면 다음과 같습니다.
- TIMEDIFF(DestinationTime, SourceTime): 두 시간 값의 차이를 'HH:MM:SS' 형식으로 반환합니다.
- TIME_TO_SEC(): TIMEDIFF()가 반환한 시간 값을 초 단위 숫자로 변환합니다.
- ABS(): 결과가 음수가 되는 경우를 대비해 절댓값으로 변환합니다. 예제에서는 DestinationTime이 SourceTime보다 작기 때문에 음수가 나올 수 있는데, ABS()를 사용하면 항상 양수인 초 값을 얻을 수 있습니다.
예를 들어 첫 번째 행의 경우 '10:20:00'과 '04:50:54'의 차이는 5시간 29분 6초이며, 이를 초로 환산하면 19,746초입니다. 두 번째 행 역시 '12:05:10'과 '07:45:12'의 차이인 4시간 19분 58초가 15,598초로 변환된 것을 확인할 수 있습니다.