MySQL DATE() 함수로 특정 날짜 데이터 조회하기
MySQL에서는 DATE() 함수를 사용하면 datetime 타입 컬럼에서 특정 날짜에 해당하는 레코드를 간단하게 조회할 수 있습니다. 기본 문법은 다음과 같습니다.
SELECT * FROM yourTableName WHERE DATE(yourDateColumnName) = 'anyDate';
DATE() 함수는 datetime 값에서 날짜 부분만 추출해 주기 때문에, 시간 정보가 포함된 컬럼이라도 원하는 날짜와 정확히 일치하는 레코드를 찾을 수 있습니다.
예제 테이블 생성하기
먼저 실습용 테이블을 생성해 보겠습니다.
mysql> create table AllRecordsFromadate -> ( -> Id int, -> Name varchar(100), -> Age int, -> AdmissionDate datetime -> ); Query OK, 0 rows affected (0.53 sec)
샘플 데이터 삽입하기
INSERT 명령을 사용해 몇 개의 레코드를 추가합니다. 시간 정보가 있는 데이터와 없는 데이터를 함께 넣어 보겠습니다.
mysql> insert into AllRecordsFromadate values(101,'John',23,'2018-10-13'); Query OK, 1 row affected (0.18 sec) mysql> insert into AllRecordsFromadate values(102,'Carol',24,'2014-12-5 12:34:50'); Query OK, 1 row affected (0.18 sec) mysql> insert into AllRecordsFromadate values(103,'Mike',25,'2014-12-5 12:30:40'); Query OK, 1 row affected (0.23 sec) mysql> insert into AllRecordsFromadate values(104,'Bob',24,'2015-10-7 11:10:20'); Query OK, 1 row affected (0.20 sec) mysql> insert into AllRecordsFromadate values(105,'Sam',25,'2011-6-26 10:10:20'); Query OK, 1 row affected (0.11 sec)
전체 데이터 확인하기
SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.
mysql> select *from AllRecordsFromadate;
실행 결과는 다음과 같습니다.
+------+-------+------+---------------------+ | Id | Name | Age | AdmissionDate | +------+-------+------+---------------------+ | 101 | John | 23 | 2018-10-13 00:00:00 | | 102 | Carol | 24 | 2014-12-05 12:34:50 | | 103 | Mike | 25 | 2014-12-05 12:30:40 | | 104 | Bob | 24 | 2015-10-07 11:10:20 | | 105 | Sam | 25 | 2011-06-26 10:10:20 | +------+-------+------+---------------------+ 5 rows in set (0.00 sec)
특정 날짜로 레코드 조회하기
이제 DATE() 함수를 활용해 '2014-12-05'라는 특정 날짜에 해당하는 레코드만 조회해 보겠습니다.
mysql> SELECT * FROM AllRecordsFromadate WHERE DATE(AdmissionDate) = '2014-12-05';
시간이 다르더라도 날짜가 일치하는 두 개의 레코드(Carol, Mike)가 함께 반환됩니다.
+------+-------+------+---------------------+ | Id | Name | Age | AdmissionDate | +------+-------+------+---------------------+ | 102 | Carol | 24 | 2014-12-05 12:34:50 | | 103 | Mike | 25 | 2014-12-05 12:30:40 | +------+-------+------+---------------------+ 2 rows in set (0.00 sec)
성능을 고려한 대안: 범위 조건 사용하기
DATE() 함수는 사용법이 간단하지만, 컬럼에 함수를 적용하면 해당 컬럼에 생성된 인덱스를 활용할 수 없어 대용량 테이블에서는 성능이 저하될 수 있습니다. 인덱스를 활용하려면 아래처럼 범위 조건을 사용하는 것이 좋습니다.
SELECT * FROM AllRecordsFromadate WHERE AdmissionDate >= '2014-12-05' AND AdmissionDate < '2014-12-06';
이 방식은 AdmissionDate 컬럼의 인덱스를 그대로 사용할 수 있어, 데이터 양이 많은 환경에서 훨씬 빠른 조회 성능을 기대할 수 있습니다.