MySQL BETWEEN 키워드로 날짜 범위 검색하기
MySQL에서 특정 날짜 사이의 레코드를 조회하는 가장 빠르고 간단한 방법은 BETWEEN 키워드를 사용하는 것입니다. BETWEEN은 시작 날짜와 종료 날짜를 지정해 해당 범위에 포함된 모든 데이터를 효율적으로 필터링할 수 있습니다.
먼저 예제에 사용할 테이블을 생성하겠습니다.
mysql> create table DemoTable1413
-> (
-> EmployeeName varchar(20),
-> EmployeeJoiningDate datetime
-> );
Query OK, 0 rows affected (0.45 sec)
테이블에 샘플 데이터 삽입하기
INSERT 문을 사용해 직원 이름과 입사일(datetime) 데이터를 몇 개 넣어 보겠습니다.
mysql> insert into DemoTable1413 values('Chris','2018-09-28 11:10:50');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable1413 values('David','2019-09-28 11:10:50');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable1413 values('Mike','2019-09-29 12:40:00');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1413 values('Carol','2019-09-28 12:06:10');
Query OK, 1 row affected (0.08 sec)저장된 전체 레코드 확인하기
SELECT 문으로 테이블에 저장된 모든 레코드를 조회합니다.
mysql> select * from DemoTable1413;
실행 결과는 다음과 같습니다.
+--------------+---------------------+
| EmployeeName | EmployeeJoiningDate |
+--------------+---------------------+
| Chris | 2018-09-28 11:10:50 |
| David | 2019-09-28 11:10:50 |
| Mike | 2019-09-29 12:40:00 |
| Carol | 2019-09-28 12:06:10 |
+--------------+---------------------+
4 rows in set (0.00 sec)
BETWEEN으로 특정 날짜의 레코드 검색하기
이제 2019년 9월 28일에 입사한 직원을 검색하는 쿼리를 작성해 보겠습니다.
mysql> select * from DemoTable1413
-> where EmployeeJoiningDate between '2019-09-28' and '2019-09-28 23:59:59'
-> limit 1;
실행 결과는 다음과 같습니다.
+--------------+---------------------+
| EmployeeName | EmployeeJoiningDate |
+--------------+---------------------+
| David | 2019-09-28 11:10:50 |
+--------------+---------------------+
1 row in set (0.03 sec)
주의할 점: 종료 시간까지 명시하기
컬럼 타입이 DATETIME인 경우, 단순히 between '2019-09-28' and '2019-09-28'처럼 날짜만 지정하면 해당 일자의 자정(00:00:00) 이후 데이터는 검색되지 않습니다. 이는 '2019-09-28'이 내부적으로 '2019-09-28 00:00:00'으로 해석되기 때문입니다.
따라서 위 예제처럼 종료 조건을 '2019-09-28 23:59:59'로 지정해야 해당 날짜 하루 전체의 레코드를 정확하게 조회할 수 있습니다. 이 방식은 인덱스가 설정된 DATETIME 컬럼에서도 인덱스를 활용할 수 있어 성능 면에서도 유리합니다.