MySQL에서 특정 기간에 속하는 날짜 데이터를 조회해야 하는 경우가 자주 있습니다. 예를 들어 입학일(AdmissionDate)이 2019년 2월 1일부터 2019년 12월 1일 사이인 레코드만 추출하고 싶다면, BETWEEN 키워드를 사용하면 됩니다. 이 글에서는 실제 예제를 통해 두 날짜 사이의 레코드를 선택하는 방법을 단계별로 살펴보겠습니다.
1. 예제 테이블 생성하기
먼저 날짜 데이터를 저장할 테이블을 생성합니다. 여기서는 DATETIME 타입의 컬럼을 하나 가진 간단한 테이블을 만들어 보겠습니다.
mysql> create table DemoTable681(AdmissionDate datetime); Query OK, 0 rows affected (0.75 sec)
2. 샘플 데이터 삽입하기
INSERT 문을 사용하여 테이블에 여러 개의 날짜 레코드를 추가합니다.
mysql> insert into DemoTable681 values('2019-01-21');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable681 values('2019-11-01');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable681 values('2019-12-03');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable681 values('2019-07-03');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable681 values('2019-02-04');
Query OK, 1 row affected (0.34 sec)3. 전체 레코드 확인하기
SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable681;
실행 결과는 다음과 같습니다.
+---------------------+ | AdmissionDate | +---------------------+ | 2019-01-21 00:00:00 | | 2019-11-01 00:00:00 | | 2019-12-03 00:00:00 | | 2019-07-03 00:00:00 | | 2019-02-04 00:00:00 | +---------------------+ 5 rows in set (0.00 sec)
총 5개의 날짜 레코드가 저장되어 있는 것을 확인할 수 있습니다.
4. BETWEEN 키워드로 두 날짜 사이의 레코드 조회하기
이제 핵심인 BETWEEN 절을 사용한 쿼리입니다. WHERE 조건과 함께 BETWEEN을 사용하면 시작 날짜와 종료 날짜 사이(경계값 포함)에 해당하는 레코드만 필터링됩니다.
mysql> select *from DemoTable681 where AdmissionDate between '2019-02-01' and '2019-12-01';
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+---------------------+ | AdmissionDate | +---------------------+ | 2019-11-01 00:00:00 | | 2019-07-03 00:00:00 | | 2019-02-04 00:00:00 | +---------------------+ 3 rows in set (0.00 sec)
결과 분석 및 주의사항
조회 결과를 보면 2019년 2월 1일부터 2019년 12월 1일 사이에 속하는 3개의 레코드(2019-11-01, 2019-07-03, 2019-02-04)만 반환되었습니다.
- 2019-01-21은 시작 날짜보다 이전이므로 제외되었습니다.
- 2019-12-03은 종료 날짜보다 이후이므로 제외되었습니다.
BETWEEN 연산자는 양쪽 경계값을 포함(inclusive)한다는 점에 유의하세요. 즉, 위 예제에서 정확히 '2019-02-01' 또는 '2019-12-01'인 레코드도 결과에 포함됩니다.
또한 컬럼 타입이 DATETIME인 경우 시간 정보까지 함께 비교된다는 점도 중요합니다. 예를 들어 종료 조건을 '2019-12-01'로 지정하면 내부적으로 '2019-12-01 00:00:00'으로 해석되므로, 12월 1일 하루 종료의 데이터까지 포함하려면 '<= '2019-12-01 23:59:59'' 조건을 사용하거나 날짜 범위를 조정해야 할 수 있습니다.
마무리
MySQL에서 두 날짜 사이의 레코드를 조회하는 것은 BETWEEN 키워드 하나로 간단하게 처리할 수 있습니다. 실무에서는 인덱스가 설정된 날짜 컬럼에 BETWEEN 조건을 사용하면 성능상 이점도 얻을 수 있으니, 기간 검색 기능을 구현할 때 적극적으로 활용해 보시기 바랍니다.