MySQL에서 CAST(컬럼명 AS DATE)와 DATE() 함수 사이에는 기능상의 차이가 전혀 없습니다. 두 방식 모두 DATETIME 값에서 날짜 부분만 추출하는 동일한 역할을 수행합니다.
CAST()와 DATE()의 문법
두 함수의 기본 문법은 다음과 같습니다.
CAST(yourDateTimeColumnName AS DATE)
DATE(yourDateTimeColumnName)
흥미로운 점은 두 함수 모두 내부적으로 Item_date_typecast라는 동일한 내부 처리기를 호출한다는 것입니다. 따라서 성능이나 결과 면에서 어떤 차이도 없으며, 개발자의 선호도나 코드 가독성에 따라 선택하면 됩니다.
실습용 테이블 생성하기
두 함수의 동작을 직접 확인해 보기 위해 테스트 테이블을 생성해 보겠습니다.
mysql> create table CastAsDateDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> ArrivalTime datetime,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.71 sec)
샘플 데이터 삽입하기
INSERT 명령어를 사용해 몇 개의 레코드를 삽입합니다.
mysql> insert into CastAsDateDemo(ArrivalTime) values('2014-1-13 13-45-46');
Query OK, 1 row affected (0.16 sec)
mysql> insert into CastAsDateDemo(ArrivalTime) values('2016-4-11 10-30-31');
Query OK, 1 row affected (0.48 sec)
mysql> insert into CastAsDateDemo(ArrivalTime) values('2019-1-9 19-17-49');
Query OK, 1 row affected (0.13 sec)
mysql> insert into CastAsDateDemo(ArrivalTime) values(date_add(now(),interval 2 day));
Query OK, 1 row affected (0.15 sec)저장된 데이터 조회하기
SELECT 문으로 테이블의 모든 레코드를 확인해 보겠습니다.
mysql> select *from CastAsDateDemo;
실행 결과는 다음과 같습니다.
+----+----------------------+ | Id | ArrivalTime | +----+----------------------+ | 1 |2014-01-13 13-45-46 | | 2 |2016-04-11 10-30-31 | | 3 |2019-01-09 19-17-49 | | 4 |2019-01-11 19-17-59 | +----+---------------------+ 4 rows in set (0.00 sec)
방법 1: CAST() 함수 사용하기
CAST()를 사용하여 DATETIME 값을 DATE 타입으로 변환하는 쿼리입니다.
mysql> select cast(ArrivalTime as Date) as only_Date from CastAsDateDemo;
실행 결과, 시간 정보가 제거된 순수한 날짜 값만 출력됩니다.
+------------+ | only_Date | +------------+ | 2014-01-13 | | 2016-04-11 | | 2019-01-09 | | 2019-01-11 | +------------+ 4 rows in set (0.00 sec)
방법 2: DATE() 함수 사용하기
이번에는 DATE() 함수를 사용해 같은 작업을 수행해 보겠습니다.
mysql> select date(ArrivalTime) as only_Date from CastAsDateDemo;
결과는 CAST()와 완전히 동일합니다.
+------------+ | only_Date | +------------+ | 2014-01-13 | | 2016-04-11 | | 2019-01-09 | | 2019-01-11 | +------------+ 4 rows in set (0.00 sec)
정리
MySQL에서 DATETIME 값을 DATE로 변환할 때 CAST(x AS DATE)와 DATE(x) 중 어떤 것을 사용해도 결과는 같습니다. SQL 표준 문법에 가까운 CAST()를 선호하는 개발자도 있고, 간결한 DATE() 함수를 선호하는 개발자도 있습니다. 프로젝트의 코딩 컨벤션에 맞춰 일관되게 사용하는 것이 가장 좋습니다.