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

MySQL TIME 값을 일·시간 형식으로 변환하는 방법 완벽 가이드

이 글에서는 MySQL에서 시간(TIME) 값을 일(day)과 시간(hour) 형식으로 변환하는 방법을 알아봅니다. 예를 들어 150:50:10이라는 TIME 값을 6 DAYS, 6 HOURS(6일 6시간) 형태로 바꾸는 것이 목표입니다.

핵심 함수: CONCAT()와 HOUR()

이 변환은 CONCAT() 함수와 HOUR() 함수를 함께 사용하면 간단하게 처리할 수 있습니다. 먼저 예제에 사용할 테이블을 생성해 보겠습니다.

mysql> create table DemoTable657(DueTime time);
Query OK, 0 rows affected (3.68 sec)

테스트 데이터 삽입

INSERT 명령으로 몇 개의 레코드를 추가합니다. 이 예제에서는 총 누적 시간 형태로 데이터를 입력합니다.

mysql> insert into DemoTable657 values('120:30:00');
Query OK, 1 row affected (0.38 sec)
mysql> insert into DemoTable657 values('150:50:10');
Query OK, 1 row affected (0.27 sec)

SELECT 문으로 테이블의 모든 레코드를 확인합니다.

mysql> select *from DemoTable657;

실행 결과는 다음과 같습니다.

+-----------+
| DueTime |
+-----------+
| 120:30:00 |
| 150:50:10 |
+-----------+
2 rows in set (0.00 sec)

TIME 값을 일·시간 형식으로 변환하는 쿼리

이제 TIME 값을 일과 시간 형식으로 변환하는 실제 쿼리입니다.

mysql> SELECT CONCAT( FLOOR(HOUR(DueTime)/24),' DAYS, ', HOUR(DueTime) MOD 24, ' HOURS.') from DemoTable657;

실행 결과는 다음과 같습니다.

+-----------------------------------------------------------------------------+
| CONCAT( FLOOR(HOUR(DueTime)/24),' DAYS, ', HOUR(DueTime) MOD 24, ' HOURS.') |
+-----------------------------------------------------------------------------+
| 5 DAYS, 0 HOURS. |
| 6 DAYS, 6 HOURS. |
+-----------------------------------------------------------------------------+
2 rows in set (0.00 sec)

쿼리 동작 원리

이 쿼리가 어떻게 동작하는지 살펴보겠습니다.

  • FLOOR(HOUR(DueTime)/24): HOUR() 함수가 반환한 총 시간을 24로 나눈 뒤 소수점을 버려 전체 '일(day)' 수를 계산합니다.
  • HOUR(DueTime) MOD 24: 총 시간을 24로 나눈 나머지를 구해 남은 '시간(hours)'을 계산합니다.
  • CONCAT(): 계산된 일 수와 시간 수를 문자열로 연결해 사람이 읽기 쉬운 형식으로 만들어 줍니다.

예를 들어 120:30:00은 120시간이므로 120 ÷ 24 = 5일, 나머지 0시간 → 5 DAYS, 0 HOURS가 되고, 150:50:10은 150 ÷ 24 = 6일, 나머지 6시간 → 6 DAYS, 6 HOURS로 변환됩니다.

이처럼 FLOOR(), MOD, CONCAT()를 조합하면 별도의 애플리케이션 로직 없이 SQL 쿼리만으로 TIME 값을 손쉽게 일·시간 형식으로 표현할 수 있습니다.