varchar 타입으로 저장된 시간 문자열(예: '1620')을 실제 시간 형식(예: 04:20)으로 변환하려면 TIME_FORMAT() 함수를 사용하면 됩니다. 이 함수를 SUBSTRING(), CONCAT()과 함께 조합하면 붙어 있는 숫자 형태의 시간 데이터를 사람이 읽기 쉬운 시간 표현으로 손쉽게 바꿀 수 있습니다.
1. 예제 테이블 생성
먼저 시간 값을 varchar로 저장하는 테이블을 생성합니다.
mysql> create table DemoTable1591 -> ( -> ArrivalTime varchar(20) -> ); Query OK, 0 rows affected (0.58 sec)
2. 샘플 데이터 삽입
INSERT 문을 사용해 몇 개의 레코드를 입력합니다.
mysql> insert into DemoTable1591 values('1620');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable1591 values('2345');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1591 values('2210');
Query OK, 1 row affected (0.12 sec)3. 저장된 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select * from DemoTable1591;
위 쿼리는 다음과 같은 결과를 출력합니다.
+-------------+ | ArrivalTime | +-------------+ | 1620 | | 2345 | | 2210 | +-------------+ 3 rows in set (0.00 sec)
4. varchar 시간을 실제 시간 형식으로 변환
이제 SUBSTRING()으로 앞 두 자리(시)와 나머지 자리(분)를 분리한 뒤, CONCAT()으로 콜론(:)을 넣어 연결하고, 최종적으로 TIME_FORMAT()으로 시간 형식을 지정합니다.
mysql> select TIME_FORMAT(CONCAT(SUBSTRING(ArrivalTime, 1,2), ':', SUBSTRING(ArrivalTime, 3,4)), '%h:%i') from DemoTable1591;
실행 결과는 다음과 같습니다.
+---------------------------------------------------------------------------------------------+ | TIME_FORMAT(CONCAT(SUBSTRING(ArrivalTime, 1,2), ':', SUBSTRING(ArrivalTime, 3,4)), '%h:%i') | +---------------------------------------------------------------------------------------------+ | 04:20 | | 11:45 | | 10:10 | +---------------------------------------------------------------------------------------------+ 3 rows in set (0.00 sec)
동작 원리 정리
- SUBSTRING(ArrivalTime, 1, 2): 문자열의 첫 번째부터 두 글자를 추출하여 '시' 부분을 가져옵니다.
- SUBSTRING(ArrivalTime, 3, 4): 세 번째 위치부터 나머지 문자를 추출하여 '분' 부분을 가져옵니다.
- CONCAT(...): 시와 분 사이에 콜론(:)을 삽입해 '16:20' 형태의 문자열을 만듭니다.
- TIME_FORMAT(..., '%h:%i'): 24시간제 값을 %h(12시간제)와 %i(분) 형식으로 변환합니다.
참고로 24시간제 그대로 출력하고 싶다면 %H:%i를 사용하면 됩니다. 예를 들어 '1620'은 %H:%i 적용 시 '16:20'으로 표시됩니다. 이처럼 TIME_FORMAT() 함수를 활용하면 별도의 애플리케이션 로직 없이 SQL 쿼리만으로 varchar 시간 데이터를 원하는 시간 형식으로 깔끔하게 변환할 수 있습니다.