개요
MySQL에서 TIME 또는 VARCHAR 데이터 유형으로 저장된 시간 값을 합산하려면 TIME_TO_SEC() 함수와 SEC_TO_TIME() 함수를 함께 사용하면 됩니다. 먼저 TIME_TO_SEC()로 각 시간 값을 초 단위로 변환한 뒤 SUM()으로 합산하고, 마지막에 SEC_TO_TIME()으로 다시 'HH:MM:SS' 형식의 시간 값으로 되돌리는 방식입니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성하겠습니다.
mysql> create table DemoTable1442
-> (
-> DueTime time
-> );
Query OK, 0 rows affected (0.56 sec)
2. 레코드 삽입하기
INSERT 문을 사용하여 테이블에 시간 데이터를 입력합니다.
mysql> insert into DemoTable1442 values('00:08:00');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1442 values('00:04:00');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1442 values('12:55:00');
Query OK, 1 row affected (0.15 sec)3. 저장된 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable1442;
실행 결과는 다음과 같습니다.
+----------+
| DueTime |
+----------+
| 00:08:00 |
| 00:04:00 |
| 12:55:00 |
+----------+
3 rows in set (0.00 sec)
4. 시간 값 합산 쿼리
다음은 TIME 또는 VARCHAR 데이터 유형의 행을 합산하는 쿼리입니다.
mysql> select sec_to_time(sum(time_to_sec(DueTime))) as TotalTime from DemoTable1442;
실행 결과는 다음과 같습니다.
+-----------+
| TotalTime |
+-----------+
| 13:07:00 |
+-----------+
1 row in set (0.03 sec)
쿼리 동작 원리
이 쿼리가 작동하는 방식을 단계별로 살펴보겠습니다.
- TIME_TO_SEC(DueTime): 각 시간 값을 초 단위 정수로 변환합니다. 예를 들어 '00:08:00'은 480초로 변환됩니다.
- SUM(...): 변환된 초 단위 값들을 모두 더합니다. 컬럼이 VARCHAR 타입이더라도 값이 'HH:MM:SS' 형식을 따르고 있다면 MySQL이 이를 시간 값으로 인식하여 정상적으로 처리합니다.
- SEC_TO_TIME(...): 합산된 총 초를 다시 'HH:MM:SS' 형식의 시간 값으로 변환해 줍니다.
위 예제의 경우 8분 + 4분 + 12시간 55분을 모두 더한 최종 결과인 13:07:00(13시간 7분)이 출력됩니다. 이 방법을 활용하면 근무 시간 집계, 누적 처리 시간 계산 등 다양한 시간 합산 작업에 손쉽게 적용할 수 있습니다.