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

MySQL DATE_SUB()로 현재 날짜 기준 3주 이전 이후 날짜 조회하기

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 등 다양한 단위로도 손쉽게 날짜 범위를 필터링할 수 있습니다.