MySQL에서 날짜(DATE) 열과 시간(TIME) 열을 하나의 타임스탬프로 합쳐야 하는 경우가 종종 있습니다. 이럴 때 concat() 함수로 두 값을 이어 붙인 뒤, cast() 함수를 사용해 DATETIME 형식으로 변환하면 간단하게 해결할 수 있습니다.
기본 문법
SELECT CAST(CONCAT(날짜열이름, ' ', 시간열이름) AS DATETIME) AS 별칭 FROM 테이블이름;
날짜와 시간 값이 문자열 형태로 저장되어 있을 때도 cast() 함수를 활용하면 됩니다. 단, cast()는 DATETIME 타입으로 변환할 때만 사용할 수 있다는 점에 유의하세요.
예제 테이블 생성
먼저 날짜 열과 시간 열을 가진 테이블을 만들어 보겠습니다.
mysql> CREATE TABLE DateAndTimeToTimestamp -> ( -> Duedate date, -> DueTime time -> ); Query OK, 0 rows affected (0.51 sec)
샘플 데이터 삽입
INSERT 명령으로 몇 개의 레코드를 추가합니다. date_add()와 curdate()를 조합해 오늘 날짜 기준으로 며칠 전후의 날짜를 넣어 보겠습니다.
mysql> INSERT INTO DateAndTimeToTimestamp VALUES(date_add(curdate(), INTERVAL 2 DAY), '10:30:02'); Query OK, 1 row affected (0.34 sec) mysql> INSERT INTO DateAndTimeToTimestamp VALUES(date_add(curdate(), INTERVAL -2 DAY), '12:20:45'); Query OK, 1 row affected (0.17 sec) mysql> INSERT INTO DateAndTimeToTimestamp VALUES(date_add(curdate(), INTERVAL 1 DAY), '01:32:42'); Query OK, 1 row affected (0.21 sec) mysql> INSERT INTO DateAndTimeToTimestamp VALUES(date_add(curdate(), INTERVAL -1 DAY), '14:25:58'); Query OK, 1 row affected (0.30 sec)
저장된 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> SELECT * FROM DateAndTimeToTimestamp;
실행 결과는 다음과 같습니다.
+------------+----------+ | Duedate | DueTime | +------------+----------+ | 2018-12-16 | 10:30:02 | | 2018-12-12 | 12:20:45 | | 2018-12-15 | 01:32:42 | | 2018-12-13 | 14:25:58 | +------------+----------+ 4 rows in set (0.00 sec)
날짜와 시간을 결합한 결과
이제 concat() 함수를 사용해 날짜 열과 시간 열을 공백 한 칸을 두고 연결해 보겠습니다.
mysql> SELECT CONCAT(Duedate, ' ', DueTime) AS timestampDemo FROM DateAndTimeToTimestamp;
결과를 확인하면 날짜와 시간이 하나의 문자열로 합쳐진 것을 볼 수 있습니다.
+---------------------+ | timestampDemo | +---------------------+ | 2018-12-16 10:30:02 | | 2018-12-12 12:20:45 | | 2018-12-15 01:32:42 | | 2018-12-13 14:25:58 | +---------------------+ 4 rows in set (0.00 sec)
위 결과를 진짜 DATETIME 또는 TIMESTAMP 타입으로 변환하고 싶다면 앞서 소개한 CAST(... AS DATETIME) 구문을 적용하면 됩니다. 이렇게 하면 문자열이 아닌 실제 날짜·시간 타입으로 반환되므로, 날짜 비교나 정렬, 범위 검색 등 다양한 연산에 바로 활용할 수 있습니다.