MySQL에서 DateTime 타입의 컬럼에 저장된 값과 특정 날짜를 비교할 때, 시간 정보는 무시하고 날짜만 기준으로 조회해야 하는 경우가 자주 있습니다. 이럴 때는 Date() 함수를 사용하면 됩니다.
Date() 함수를 활용한 기본 문법
Date() 함수는 DateTime 값에서 날짜 부분만 추출해 줍니다. 아래 문법에서 'yourDateValue' 위치에 비교하고자 하는 날짜를 입력하면 됩니다.
select * from yourTableName where Date(yourColumnName) = 'yourDateValue';
예제 테이블 생성하기
실습을 위해 먼저 DateTime 타입의 컬럼을 가진 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
(
ArrivalTime datetime
);
Query OK, 0 rows affected (0.74 sec)샘플 데이터 삽입
다음은 insert 명령을 사용해 테이블에 여러 개의 레코드를 삽입하는 쿼리입니다.
mysql> insert into DemoTable values('2019-01-31 02:34:56');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values('2019-04-09 18:20:58');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('2019-05-11 19:45:23');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('2019-02-03 21:10:02');
Query OK, 1 row affected (0.16 sec)저장된 데이터 확인
select 명령으로 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> select * from DemoTable;
실행 결과, 날짜와 시간이 함께 저장되어 있는 것을 확인할 수 있습니다.
+---------------------+ | ArrivalTime | +---------------------+ | 2019-01-31 02:34:56 | | 2019-04-09 18:20:58 | | 2019-05-11 19:45:23 | | 2019-02-03 21:10:02 | +---------------------+ 4 rows in set (0.00 sec)
시간을 제외하고 날짜만 비교하는 쿼리
이제 Date() 함수를 적용하여 시간은 제외하고 날짜만 비교해 보겠습니다. 여기서는 2019년 4월 9일에 해당하는 레코드를 조회합니다.
mysql> select * from DemoTable where Date(ArrivalTime) = '2019-04-09';
실행 결과, 해당 날짜의 레코드 하나만 정확히 반환되는 것을 확인할 수 있습니다.
+---------------------+ | ArrivalTime | +---------------------+ | 2019-04-09 18:20:58 | +---------------------+ 1 row in set (0.00 sec)
참고: 성능 최적화 팁
Date() 함수를 WHERE 절의 컬럼에 직접 적용하면 해당 컬럼에 설정된 인덱스를 활용하지 못해 대용량 테이블에서는 조회 속도가 느려질 수 있습니다. 인덱스를 활용하려면 아래와 같이 범위 조건(>=, <)을 사용하는 방식이 더 효율적입니다.
select * from DemoTable where ArrivalTime >= '2019-04-09' and ArrivalTime < '2019-04-10';
데이터 양이 많은 환경이라면 상황에 맞게 두 방식을 선택하여 사용하시기 바랍니다.