MySQL에서 특정 날짜로부터 최근 14일 이내에 해당하는 레코드만 조회하고 싶다면, CURDATE() 함수와 DATE_SUB() 함수를 조합하면 간단하게 해결할 수 있습니다. 이번 글에서는 실제 예제를 통해 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 날짜 컬럼을 가진 테이블을 생성합니다.
mysql> create table DemoTable1392
-> (
-> ArrivalDate date
-> );
Query OK, 0 rows affected (0.43 sec)
2. 샘플 데이터 삽입하기
테스트를 위해 여러 개의 날짜 레코드를 INSERT 문으로 추가합니다.
mysql> insert into DemoTable1392 values('2019-09-10');
Query OK, 1 row affected (0.46 sec)
mysql> insert into DemoTable1392 values('2019-09-26');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable1392 values('2019-09-12');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1392 values('2018-09-20');
Query OK, 1 row affected (0.31 sec)
mysql> insert into DemoTable1392 values('2019-10-11');
Query OK, 1 row affected (0.11 sec)3. 전체 레코드 확인하기
SELECT 문으로 테이블에 저장된 모든 데이터를 조회해 보겠습니다.
mysql> select * from DemoTable1392;
실행 결과는 다음과 같습니다.
+-------------+
| ArrivalDate |
+-------------+
| 2019-09-10 |
| 2019-09-26 |
| 2019-09-12 |
| 2018-09-20 |
| 2019-10-11 |
+-------------+
5 rows in set (0.00 sec)
4. 현재 날짜 확인하기
CURDATE() 함수를 사용하면 현재 시스템 날짜를 확인할 수 있습니다. 이 예제에서 현재 날짜는 2019-09-26입니다.
mysql> select curdate();
+------------+
| curdate() |
+------------+
| 2019-09-26 |
+------------+
1 row in set (0.00 sec)
5. 최근 14일 이내 데이터 조회 쿼리
핵심은 DATE_SUB() 함수입니다. 현재 날짜에서 14일을 빼서 기준일을 만든 뒤, 그보다 큰(더 최근인) 날짜만 필터링합니다.
mysql> select * from DemoTable1392
-> where ArrivalDate > date_sub(curdate(), interval 14 day);
실행 결과는 다음과 같습니다.
+-------------+
| ArrivalDate |
+-------------+
| 2019-09-26 |
| 2019-10-11 |
+-------------+
2 rows in set (0.03 sec)
쿼리 동작 원리 정리
- CURDATE(): 현재 날짜(2019-09-26)를 반환합니다.
- DATE_SUB(curdate(), INTERVAL 14 DAY): 현재 날짜에서 14일을 뺀 날짜(2019-09-12)를 계산합니다.
- WHERE 절 비교: 기준일보다 최근인 날짜만 조회되므로, 2019-09-12 이후의 데이터인 '2019-09-26'과 '2019-10-11' 두 건이 반환됩니다.
참고로 정확히 14일 전 날짜까지 포함하고 싶다면 비교 연산자를 >=로 변경하면 됩니다. 또한 시간 정보까지 고려해야 하는 경우에는 NOW()와 DATETIME 타입을 활용하는 것이 좋습니다.