MySQL에서 특정 기간, 예를 들어 90일 전부터 오늘까지의 날짜를 가진 행을 조회하려면 INTERVAL 키워드와 BETWEEN 연산자를 함께 사용하면 됩니다. 이번 글에서는 실제 예제를 통해 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 날짜 컬럼 하나를 가진 간단한 테이블을 만들어 보겠습니다.
mysql> create table DemoTable
(
DueDate date
);
Query OK, 0 rows affected (1.13 sec)2. 샘플 데이터 삽입하기
INSERT 문을 사용해 다양한 날짜의 레코드를 입력합니다.
mysql> insert into DemoTable values('2019-07-10');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('2019-09-02');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('2019-06-01');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable values('2019-05-10');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('2019-08-21');
Query OK, 1 row affected (0.14 sec)3. 전체 데이터 확인하기
SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+------------+ | DueDate | +------------+ | 2019-07-10 | | 2019-09-02 | | 2019-06-01 | | 2019-05-10 | | 2019-08-21 | +------------+ 5 rows in set (0.00 sec)
4. 최근 90일 이내 데이터 조회하기
이제 핵심 쿼리입니다. now() - interval 90 day로 90일 전 시점을 구하고, BETWEEN 연산자로 그 시점부터 현재(now()) 사이에 해당하는 날짜만 필터링합니다.
mysql> select *from DemoTable where DueDate between now() - interval 90 day and now();
실행 결과는 다음과 같습니다.
+------------+ | DueDate | +------------+ | 2019-07-10 | | 2019-08-21 | +------------+ 2 rows in set (0.00 sec)
쿼리 동작 원리 정리
now(): 현재 날짜와 시간을 반환합니다.now() - interval 90 day: 현재 시점에서 90일을 뺀 날짜를 계산합니다.BETWEEN A AND B: A 이상 B 이하 범위에 속하는 값을 선택합니다.
즉, 위 쿼리는 90일 전부터 지금까지 범위 안에 있는 날짜만 골라냅니다. 참고로 interval 90 day 대신 interval 3 month, interval 1 week처럼 다른 단위도 자유롭게 사용할 수 있으므로, 조회 기간을 유연하게 조절할 수 있다는 점이 큰 장점입니다.