MySQL에서 1주일보다 오래된 레코드 조회하기
데이터베이스 작업을 하다 보면 특정 기간보다 오래된 데이터만 추출해야 하는 경우가 자주 발생합니다. 예를 들어 일주일 이전에 저장된 로그를 정리하거나 오래된 게시글을 관리할 때 유용합니다. MySQL에서는 now() - interval 1 week 구문을 활용하면 간단하게 처리할 수 있습니다.
기본 문법
날짜가 1주일보다 오래된 레코드를 조회하려면 다음과 같은 문법을 사용합니다.
select * from yourTableName where yourColumnName < now() - interval 1 week;
예제 테이블 생성
개념을 확실히 이해하기 위해 실습용 테이블을 먼저 만들어 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.
mysql> create table DatesOfOneWeek
-> (
-> ArrivalTime datetime
-> );
Query OK, 0 rows affected (0.87 sec)
샘플 데이터 삽입
이제 테스트용으로 여러 날짜 값을 삽입합니다. 현재 시점을 기준으로 미래 날짜와 과거 날짜를 섞어서 넣었습니다.
mysql> insert into DatesOfOneWeek values(date_add(now(),interval 2 week));
Query OK, 1 row affected (0.11 sec)
mysql> insert into DatesOfOneWeek values('2018-11-04');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DatesOfOneWeek values('2018-11-25');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DatesOfOneWeek values(date_add(now(),interval -1 week));
Query OK, 1 row affected (0.14 sec)
mysql> insert into DatesOfOneWeek values(date_add(now(),interval 1 week));
Query OK, 1 row affected (0.11 sec)
저장된 데이터 확인
삽입한 레코드가 정상적으로 저장되었는지 전체 데이터를 조회해 확인해 보겠습니다.
mysql> select *from DatesOfOneWeek;
실행 결과는 다음과 같습니다.
+---------------------+
| ArrivalTime |
+---------------------+
| 2018-12-20 18:11:02 |
| 2018-11-04 00:00:00 |
| 2018-11-25 00:00:00 |
| 2018-11-29 18:11:40 |
| 2018-12-13 18:11:46 |
+---------------------+
5 rows in set (0.00 sec)
1주일 이전 날짜 조회 쿼리 실행
이제 핵심인, 1주일보다 이전 즉 과거의 날짜를 가진 레코드만 조회하는 MySQL 쿼리입니다.
mysql> select *from DatesOfOneWeek where ArrivalTime < now() - interval 1 week;
실행 결과는 다음과 같습니다.
+---------------------+
| ArrivalTime |
+---------------------+
| 2018-11-04 00:00:00 |
| 2018-11-25 00:00:00 |
| 2018-11-29 18:11:40 |
+---------------------+
3 rows in set (0.00 sec)
결과 분석 및 참고 사항
전체 5개의 레코드 중 3개만 반환되었습니다. now() - interval 1 week는 현재 시점에서 정확히 1주일 전의 시각을 의미하며, 그보다 이전인 ArrivalTime 값만 조건에 해당하기 때문입니다. 반대로 미래 날짜나 최근 1주일 이내의 데이터는 결과에서 제외됩니다.
참고로 now() 대신 curdate()를 사용하면 시간을 제외한 날짜 기준으로 비교할 수 있으며, date_sub(now(), interval 1 week) 함수를 사용해도 동일한 결과를 얻을 수 있습니다.