MySQL에서 두 날짜 사이에 해당하는 데이터를 검색하려면 BETWEEN 키워드를 사용하면 됩니다. 이 키워드는 시작 날짜와 종료 날짜를 포함한 범위 내의 레코드만 조회할 때 매우 유용합니다.
1. 샘플 테이블 생성하기
먼저 실습에 사용할 테이블을 생성해 보겠습니다. 고객 이름과 오퍼 시작일, 종료일을 저장하는 구조입니다.
mysql> create table DemoTable1456
-> (
-> CustomerName varchar(30),
-> StartOfferDate date,
-> EndOfferDate date
-> );
Query OK, 0 rows affected (0.54 sec)
2. 테스트 데이터 삽입하기
INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable1456 values('Chris','2019-09-01','2019-09-30');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1456 values('David','2019-09-01','2019-10-30');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1456 values('Bob','2018-10-01','2018-10-20');
Query OK, 1 row affected (0.15 sec)3. 전체 레코드 확인하기
SELECT 문으로 테이블에 저장된 모든 데이터를 조회합니다.
mysql> select * from DemoTable1456;
실행 결과는 다음과 같습니다.
+--------------+----------------+--------------+
| CustomerName | StartOfferDate | EndOfferDate |
+--------------+----------------+--------------+
| Chris | 2019-09-01 | 2019-09-30 |
| David | 2019-09-01| 2019-10-30 |
| Bob | 2018-10-01 | 2018-10-20 |
+--------------+----------------+--------------+
3 rows in set (0.00 sec)
4. 두 날짜 사이 조건으로 검색하기
이제 BETWEEN 키워드를 사용해 현재 날짜가 오퍼 기간(시작일~종료일)에 포함되는 레코드만 조회하는 쿼리입니다.
mysql> select * from DemoTable1456
-> where date(now()) between StartOfferDate and EndOfferDate;
실행 결과는 다음과 같습니다.
+--------------+----------------+--------------+
| CustomerName | StartOfferDate | EndOfferDate |
+--------------+----------------+--------------+
| David | 2019-09-01 | 2019-10-30 |
+--------------+----------------+--------------+
1 row in set (0.04 sec)
쿼리 설명
date(now()) 함수는 현재 시스템 날짜를 반환합니다. WHERE 절에서 이 값이 StartOfferDate와 EndOfferDate 사이에 있는지 확인하여, 현재 진행 중인 오퍼에 해당하는 고객 레코드만 필터링합니다. 위 예제에서는 David의 오퍼 기간(2019-09-01 ~ 2019-10-30)이 현재 날짜를 포함하고 있으므로 해당 레코드 하나만 결과로 반환된 것입니다.
참고로 BETWEEN은 양 끝값(경계값)을 모두 포함하므로, 시작일과 종료일 당일의 데이터도 함께 조회됩니다. 특정 날짜 범위를 직접 지정하고 싶다면 date(now()) 대신 원하는 날짜 문자열(예: '2019-09-15')을 넣으면 됩니다.