MySQL에서 특정 날짜로부터 일주일이 지난 레코드만 골라내야 하는 경우가 종종 있습니다. 예를 들어 오래된 배송 기록을 정리하거나, 일정 기간이 지난 데이터를 필터링할 때 유용한데요. 이럴 때 DATEDIFF() 함수를 사용하면 간단하게 해결할 수 있습니다.
1. 현재 날짜 확인하기
먼저 NOW() 함수로 현재 시스템의 날짜와 시간을 확인해 보겠습니다.
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2019-06-09 19:15:56 |
+---------------------+
1 row in set (0.00 sec)
현재 날짜가 2019-06-09임을 확인했습니다.
2. 테스트용 테이블 생성
예제를 위해 배송 날짜(ShippingDate)를 저장하는 테이블을 만들어 보겠습니다.
mysql> create table DemoTable
-> (
-> ShippingDate datetime
-> );
Query OK, 0 rows affected (0.66 sec)
샘플 데이터 입력
INSERT 명령으로 여러 개의 날짜 데이터를 넣어 줍니다.
mysql> insert into DemoTable values('2019-06-01');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('2019-06-02');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable values('2019-06-14');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('2019-05-21');
Query OK, 1 row affected (0.24 sec)입력된 전체 데이터 확인
mysql> select *from DemoTable;
실행 결과
+---------------------+
| ShippingDate |
+---------------------+
| 2019-06-01 00:00:00 |
| 2019-06-02 00:00:00 |
| 2019-06-14 00:00:00 |
| 2019-05-21 00:00:00 |
+---------------------+
4 rows in set (0.00 sec)
총 4개의 레코드가 저장되어 있는 것을 볼 수 있습니다.
3. 일주일 이상 지난 행 조회 쿼리
핵심은 DATEDIFF() 함수입니다. 이 함수는 두 날짜 사이의 일수 차이를 계산해 주므로, 현재 날짜와 저장된 날짜의 차이가 7일보다 큰지 비교하면 됩니다.
현재 날짜가 2019-06-09라고 가정하면, 일주일 전인 2019-06-02보다 이전에 저장된 데이터들이 조회 대상이 됩니다.
mysql> select *from DemoTable where DATEDIFF(now(),ShippingDate) > 7;
실행 결과
+---------------------+
| ShippingDate |
+---------------------+
| 2019-06-01 00:00:00 |
| 2019-05-21 00:00:00 |
+---------------------+
2 rows in set (0.00 sec)
결과를 보면 2019-06-01과 2019-05-21, 즉 일주일보다 오래된 두 개의 행만 반환된 것을 확인할 수 있습니다. 반면 6월 2일과 6월 14일 데이터는 조건에 해당하지 않아 제외되었습니다.
참고: 다른 방법들
DATEDIFF() 외에도 아래와 같은 방법으로 동일한 결과를 얻을 수 있습니다.
- SUBDATE() / DATE_SUB() 사용:
WHERE ShippingDate < SUBDATE(NOW(), INTERVAL 7 DAY) - INTERVAL 연산자 직접 비교:
WHERE ShippingDate < NOW() - INTERVAL 7 DAY
두 방식 모두 인덱스를 활용할 수 있어 대량의 데이터를 다룰 때는 성능 면에서 더 유리할 수 있습니다. 상황에 맞게 적절한 방법을 선택해서 사용하시기 바랍니다.