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

MySQL에서 30일 범위의 날짜 데이터를 조회하는 방법

MySQL에서 특정 시점을 기준으로 앞뒤 30일 이내의 날짜 데이터를 조회하려면 INTERVAL을 활용한 산술 연산을 사용하면 됩니다. NOW() 함수에서 30일을 빼고 더하는 방식으로 간단하게 구현할 수 있습니다.

기본 문법

30일 범위의 날짜를 선택하는 기본 문법은 다음과 같습니다.

select * from yourTableName
where yourDateColumnName > NOW() - INTERVAL 30 DAY
and yourDateColumnName < NOW() + INTERVAL 30 DAY;

예제 테이블 생성

실제 동작을 이해하기 위해 예제 테이블을 먼저 만들어 보겠습니다. 아래 쿼리로 테이블을 생성합니다.

mysql> create table selectDatesDemo
    -> (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> ArrivalDate datetime
    -> );
Query OK, 0 rows affected (0.77 sec)

샘플 데이터 삽입

insert 명령어를 사용해 테이블에 여러 개의 레코드를 삽입합니다.

mysql> insert into selectDatesDemo(ArrivalDate) values('2019-01-10');
Query OK, 1 row affected (0.12 sec)
mysql> insert into selectDatesDemo(ArrivalDate) values('2019-01-29');
Query OK, 1 row affected (0.21 sec)
mysql> insert into selectDatesDemo(ArrivalDate) values('2019-02-13');
Query OK, 1 row affected (0.14 sec)
mysql> insert into selectDatesDemo(ArrivalDate) values('2019-02-19');
Query OK, 1 row affected (0.14 sec)
mysql> insert into selectDatesDemo(ArrivalDate) values('2018-02-13');
Query OK, 1 row affected (0.17 sec)
mysql> insert into selectDatesDemo(ArrivalDate) values('2018-03-13');
Query OK, 1 row affected (0.19 sec)

전체 데이터 확인

select 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select * from selectDatesDemo;

실행 결과는 다음과 같습니다.

+----+---------------------+
| Id | ArrivalDate |
+----+---------------------+
| 1 | 2019-01-10 00:00:00 |
| 2 | 2019-01-29 00:00:00 |
| 3 | 2019-02-13 00:00:00 |
| 4 | 2019-02-19 00:00:00 |
| 5 | 2018-02-13 00:00:00 |
| 6 | 2018-03-13 00:00:00 |
+----+---------------------+
6 rows in set (0.00 sec)

30일 범위 날짜 조회 쿼리 실행

이제 현재 날짜를 기준으로 앞뒤 30일 이내에 해당하는 레코드만 조회하는 쿼리를 실행해 보겠습니다.

mysql> select * from selectDatesDemo
   -> where ArrivalDate > NOW() - INTERVAL 30 DAY
   -> and ArrivalDate < NOW() + INTERVAL 30 DAY;

실행 결과는 다음과 같습니다.

+----+---------------------+
| Id | ArrivalDate |
+----+---------------------+
| 3 | 2019-02-13 00:00:00 |
| 4 | 2019-02-19 00:00:00 |
+----+---------------------+
2 rows in set (0.04 sec)

위 출력 결과를 보면 현재 시점(2019년 2월 중순경)을 기준으로 앞뒤 30일 이내에 있는 두 개의 레코드만 반환된 것을 확인할 수 있습니다. 이처럼 NOW() 함수와 INTERVAL을 조합하면 별도의 복잡한 계산 없이도 원하는 날짜 범위의 데이터를 손쉽게 필터링할 수 있습니다. 참고로 정확히 30일이 아니라 한 달 단위로 조회하고 싶다면 INTERVAL 1 MONTH를 사용하는 것도 가능합니다.