MySQL에서 DATETIME 타입의 데이터를 DATE 타입으로 변환하고 싶다면 CAST() 함수를 사용하면 됩니다. 이 함수는 하나의 데이터 타입을 다른 타입으로 손쉽게 변환해 주는 표준 SQL 함수로, 날짜와 시간이 함께 저장된 값에서 날짜 부분만 추출할 때 매우 유용합니다.
CAST() 함수 기본 문법
SELECT CAST(컬럼명 AS DATE) AS 별칭 FROM 테이블명;
위 문법에서 yourColumnName 자리에 DATETIME 타입의 컬럼 이름을 넣고, AS Date를 지정하면 해당 컬럼의 값이 날짜 형식으로 변환됩니다.
예제 테이블 생성하기
실제 동작을 확인하기 위해 먼저 DATETIME 타입 컬럼을 가진 테이블을 생성해 보겠습니다.
mysql> create table ConvertDateTimeToDate -> ( -> ArrivalDatetime datetime -> ); Query OK, 0 rows affected (0.37 sec)
샘플 데이터 삽입하기
이제 INSERT 명령으로 DATETIME 값을 여러 개 입력합니다. 첫 번째 레코드는 date_add() 함수를 사용해 현재 시간에서 1년 전 시점을 계산하여 삽입했습니다.
mysql> insert into ConvertDateTimeToDate values(date_add(now(),interval -1 year));
Query OK, 1 row affected (0.19 sec)
mysql> insert into ConvertDateTimeToDate values('2017-11-21 13:10:20');
Query OK, 1 row affected (0.14 sec)
mysql> insert into ConvertDateTimeToDate values('2016-05-24 21:11:24');
Query OK, 1 row affected (0.26 sec)
mysql> insert into ConvertDateTimeToDate values('2012-04-30 04:05:50');
Query OK, 1 row affected (0.13 sec)저장된 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from ConvertDateTimeToDate;
실행 결과는 다음과 같습니다.
+---------------------+ | ArrivalDatetime | +---------------------+ | 2017-12-27 10:05:21 | | 2017-11-21 13:10:20 | | 2016-05-24 21:11:24 | | 2012-04-30 04:05:50 | +---------------------+ 4 rows in set (0.00 sec)
DATETIME을 DATE로 변환하는 쿼리 실행하기
이제 핵심인 변환 쿼리입니다. CAST() 함수를 사용해 ArrivalDatetime 컬럼을 DATE 타입으로 변환합니다.
mysql> select cast(ArrivalDatetime as Date) as Date from ConvertDateTimeToDate;
실행 결과를 보면 시간 정보가 제거되고 날짜만 깔끔하게 출력되는 것을 확인할 수 있습니다.
+------------+ | Date | +------------+ | 2017-12-27 | | 2017-11-21 | | 2016-05-24 | | 2012-04-30 | +------------+ 4 rows in set (0.00 sec)
추가 팁: DATE() 함수도 사용 가능
CAST() 외에도 MySQL에서 제공하는 DATE() 함수를 사용하면 동일한 결과를 얻을 수 있습니다.
SELECT DATE(ArrivalDatetime) AS Date FROM ConvertDateTimeToDate;
두 방법 모두 성능 차이가 거의 없으므로, 코드의 가독성이나 팀의 코딩 규칙에 맞춰 선택하시면 됩니다. WHERE 절에서 특정 날짜와 비교할 때도 이 방식을 활용하면 시간 정보 때문에 발생하는 조건 누락 문제를 예방할 수 있습니다.