MySQL에서 TIMESTAMP나 DATETIME 타입의 컬럼에서 날짜 부분(년, 월, 일)만 비교하고 싶을 때가 있습니다. 시간 정보는 제외하고 특정 날짜와 일치하는 레코드만 조회하려면 DATE() 함수를 사용하면 됩니다. 이 글에서는 실제 예제를 통해 DATE() 함수로 날짜를 비교하는 방법을 단계별로 알아보겠습니다.
1. 테이블 생성하기
먼저 TIMESTAMP 타입의 컬럼을 가진 테이블을 생성합니다.
mysql> create table DemoTable864(DueDateTime timestamp);
Query OK, 0 rows affected (0.56 sec)
2. 샘플 데이터 삽입하기
INSERT 문을 사용해 테이블에 여러 개의 날짜·시간 값을 입력합니다.
mysql> insert into DemoTable864 values('2019-01-10 12:34:55');
Query OK, 1 row affected (0.26 sec)
mysql> insert into DemoTable864 values('2016-12-11 11:12:00');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable864 values('2015-04-01 10:00:00');
Query OK, 1 row affected (0.28 sec)
mysql> insert into DemoTable864 values('2017-05-20 04:40:10');
Query OK, 1 row affected (0.17 sec)3. 전체 레코드 조회하기
SELECT 문으로 테이블에 저장된 모든 레코드를 확인합니다.
mysql> select *from DemoTable864;
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+---------------------+
| DueDateTime |
+---------------------+
| 2019-01-10 12:34:55 |
| 2016-12-11 11:12:00 |
| 2015-04-01 10:00:00 |
| 2017-05-20 04:40:10 |
+---------------------+
4 rows in set (0.00 sec)
4. DATE() 함수로 년·월·일 비교하기
이제 핵심인 날짜 비교 쿼리입니다. DATE() 함수는 TIMESTAMP 값에서 시간 정보를 제거하고 날짜 부분만 반환합니다. 따라서 아래와 같이 WHERE 절에서 특정 날짜와 비교하면 해당 일자에 해당하는 레코드만 조회할 수 있습니다.
mysql> select *from DemoTable864 where date(DueDateTime)='2015-04-01';
실행 결과는 다음과 같습니다.
+---------------------+
| DueDateTime |
+---------------------+
| 2015-04-01 10:00:00 |
+---------------------+
1 row in set (0.04 sec)
정리 및 참고 사항
DATE(DueDateTime) = '2015-04-01' 조건은 시간과 관계없이 2015년 4월 1일에 해당하는 모든 레코드를 반환합니다. 다만, 데이터 양이 많은 테이블에서는 컬럼에 함수를 적용하면 인덱스를 활용하지 못할 수 있다는 점에 유의하세요. 이 경우 아래와 같은 범위 조건 방식이 성능 면에서 더 유리합니다.
mysql> select *from DemoTable864
-> where DueDateTime >= '2015-04-01'
-> and DueDateTime < '2015-04-02';
이처럼 DATE() 함수를 사용하면 간단하게 날짜 단위 비교가 가능하며, 상황에 따라 범위 조건을 함께 고려하면 더욱 효율적인 쿼리를 작성할 수 있습니다.