MySQL에서 특정 날짜가 '현재 날짜에서 3주를 뺀 날짜'보다 크거나 같은 데이터를 조회하려면 DATE_SUB() 함수를 활용하면 됩니다. DATE_SUB()는 지정한 날짜에서 일정 기간을 빼는 함수로, INTERVAL 키워드와 함께 사용하면 원하는 기간만큼 손쉽게 계산할 수 있습니다.
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, ArrivalDate datetime ); Query OK, 0 rows affected (1.02 sec)
참고: 이 예제에서는 현재 날짜를 2019-06-08이라고 가정합니다.
샘플 데이터 삽입
insert 명령을 사용해 테이블에 여러 개의 레코드를 삽입합니다.
mysql> insert into DemoTable(ArrivalDate) values('2019-05-15');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(ArrivalDate) values('2019-06-08');
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable(ArrivalDate) values('2019-05-20');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable(ArrivalDate) values('2019-05-12');
Query OK, 1 row affected (0.12 sec)select 문으로 테이블의 모든 레코드를 확인해 보겠습니다.
mysql> select *from DemoTable;
출력 결과
+----+---------------------+ | Id | ArrivalDate | +----+---------------------+ | 1 | 2019-05-15 00:00:00 | | 2 | 2019-06-08 00:00:00 | | 3 | 2019-05-20 00:00:00 | | 4 | 2019-05-12 00:00:00 | +----+---------------------+ 4 rows in set (0.00 sec)
현재 날짜에서 3주를 뺀 날짜 이후의 데이터 조회 쿼리
다음은 현재 날짜에서 3주를 뺀 날짜보다 크거나 같은(≥) ArrivalDate를 조회하는 쿼리입니다.
mysql> select ArrivalDate from DemoTable where ArrivalDate> DATE_SUB(curdate(),INTERVAL 3 WEEK);
출력 결과
+---------------------+ | ArrivalDate | +---------------------+ | 2019-06-08 00:00:00 | | 2019-05-20 00:00:00 | +---------------------+ 2 rows in set (0.00 sec)
위 결과를 살펴보면, 현재 날짜(2019-06-08)에서 3주를 뺀 2019-05-18 이후의 데이터 두 건만 반환된 것을 확인할 수 있습니다. 즉, 2019-05-15와 2019-05-12는 기준 날짜보다 이전이므로 조건에 해당하지 않아 자동으로 제외되었습니다.
이처럼 DATE_SUB(curdate(), INTERVAL n WEEK) 패턴을 응용하면 DAY, MONTH, YEAR 등 다양한 단위로도 손쉽게 날짜 범위를 필터링할 수 있습니다.