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

MySQL에서 일주일보다 오래된 데이터만 조회하는 방법 (DATEDIFF 함수 활용)

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-012019-05-21, 즉 일주일보다 오래된 두 개의 행만 반환된 것을 확인할 수 있습니다. 반면 6월 2일과 6월 14일 데이터는 조건에 해당하지 않아 제외되었습니다.

참고: 다른 방법들

DATEDIFF() 외에도 아래와 같은 방법으로 동일한 결과를 얻을 수 있습니다.

  • SUBDATE() / DATE_SUB() 사용: WHERE ShippingDate < SUBDATE(NOW(), INTERVAL 7 DAY)
  • INTERVAL 연산자 직접 비교: WHERE ShippingDate < NOW() - INTERVAL 7 DAY

두 방식 모두 인덱스를 활용할 수 있어 대량의 데이터를 다룰 때는 성능 면에서 더 유리할 수 있습니다. 상황에 맞게 적절한 방법을 선택해서 사용하시기 바랍니다.