MySQL에서 TIME 타입으로 저장된 값은 기본적으로 'HH:MM:SS' 형태로 초까지 함께 출력됩니다. 하지만 실무에서는 화면에 시간과 분만 깔끔하게 보여주고 싶은 경우가 많습니다. 이럴 때 DATE_FORMAT() 함수를 사용하면 간단하게 해결할 수 있습니다.
DATE_FORMAT() 함수 기본 문법
SELECT DATE_FORMAT(컬럼명, '%k:%i') AS 별칭 FROM 테이블명;
형식 지정자로 '%H:%i'를 사용해도 동일한 결과를 얻을 수 있습니다. 두 지정자의 차이점은 다음과 같습니다.
- %k : 시간을 0~23 범위로 표시하되, 한 자리 숫자 앞에 0을 붙이지 않습니다. (예: 9:30)
- %H : 시간을 항상 두 자리로 표시하며, 한 자리 숫자 앞에 0을 채웁니다. (예: 09:30)
예제 테이블 생성하기
문법을 이해하기 위해 먼저 예제용 테이블을 만들어 보겠습니다.
mysql> create table TimeDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> LastLoginTime time
-> );
Query OK, 0 rows affected (0.56 sec)샘플 데이터 삽입하기
INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into TimeDemo(LastLoginTime) values('09:30:35');
Query OK, 1 row affected (0.20 sec)
mysql> insert into TimeDemo(LastLoginTime) values('10:45:30');
Query OK, 1 row affected (0.19 sec)
mysql> insert into TimeDemo(LastLoginTime) values('13:33:58');
Query OK, 1 row affected (0.24 sec)
mysql> insert into TimeDemo(LastLoginTime) values('15:45:31');
Query OK, 1 row affected (0.21 sec)
mysql> insert into TimeDemo(LastLoginTime) values('16:40:36');
Query OK, 1 row affected (0.17 sec)저장된 전체 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from TimeDemo;
실행 결과는 다음과 같습니다. 아직 초 단위까지 모두 출력되는 것을 확인할 수 있습니다.
+----+---------------+ | Id | LastLoginTime | +----+---------------+ | 1 | 09:30:35 | | 2 | 10:45:30 | | 3 | 13:33:58 | | 4 | 15:45:31 | | 5 | 16:40:36 | +----+---------------+ 5 rows in set (0.00 sec)
초를 제외한 시간 조회하기 (%k:%i 사용)
이제 DATE_FORMAT() 함수에 '%k:%i' 형식 지정자를 적용하여 초 없이 시간만 가져오는 쿼리입니다.
mysql> select DATE_FORMAT(LastLoginTime,'%k:%i') as `Time` from TimeDemo;
실행 결과입니다. 9시처럼 한 자리 수인 경우 앞에 0이 붙지 않습니다.
+-------+ | Time | +-------+ | 9:30 | | 10:45 | | 13:33 | | 15:45 | | 16:40 | +-------+ 5 rows in set (0.00 sec)
항상 두 자리 시간으로 표시하기 (%H:%i 사용)
형식 지정자를 '%H:%i'로 변경하면 한 자리 시간도 0으로 채워 두 자리로 일관성 있게 표시됩니다.
mysql> select DATE_FORMAT(LastLoginTime,' %H:%i') as `Time` from TimeDemo;
실행 결과입니다.
+--------+ | Time | +--------+ | 09:30 | | 10:45 | | 13:33 | | 15:45 | | 16:40 | +--------+ 5 rows in set (0.00 sec)
마무리 정리
MySQL에서 TIME 컬럼의 초 단위를 제거하고 싶다면 DATE_FORMAT() 함수와 형식 지정자를 조합하면 됩니다. 상황에 따라 적절한 지정자를 선택하세요.
- %k:%i → 9:30 (앞자리 0 생략)
- %H:%i → 09:30 (항상 두 자리 유지)
참고로 %i는 분(Minutes)을 의미하며, 이 외에도 %s(초), %p(AM/PM), %r(12시간제 전체 시간) 등 다양한 형식 지정자를 활용하면 원하는 시간 포맷을 자유롭게 만들 수 있습니다.