Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 두 날짜 사이의 날짜 레코드 선택하기 – BETWEEN 키워드 완벽 가이드

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 조건을 사용하면 성능상 이점도 얻을 수 있으니, 기간 검색 기능을 구현할 때 적극적으로 활용해 보시기 바랍니다.