MySQL에서 현재 날짜를 기준으로 1일 이상(>= 1 day)에 해당하는 데이터를 조회하려면 INTERVAL 개념을 활용하면 됩니다.
현재 날짜 확인하기
먼저 CURDATE() 함수로 현재 날짜를 확인해 보겠습니다.
mysql> select curdate();
+------------+
| curdate() |
+------------+
| 2019-11-29 |
+------------+
1 row in set (0.00 sec)
테이블 생성 및 데이터 입력
예제를 위해 먼저 테이블을 생성합니다.
mysql> create table DemoTable1806
(
DueDate datetime
);
Query OK, 0 rows affected (0.00 sec)
INSERT 명령어를 사용하여 테이블에 여러 레코드를 삽입합니다.
mysql> insert into DemoTable1806 values('2019-11-28');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1806 values('2019-11-29');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1806 values('2019-11-30');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1806 values('2019-11-25');
Query OK, 1 row affected (0.00 sec)저장된 데이터 전체 조회
SELECT 문을 사용하여 테이블의 모든 레코드를 확인합니다.
mysql> select * from DemoTable1806;
위 쿼리는 다음과 같은 결과를 출력합니다.
+---------------------+
| DueDate |
+---------------------+
| 2019-11-28 00:00:00 |
| 2019-11-29 00:00:00 |
| 2019-11-30 00:00:00 |
| 2019-11-25 00:00:00 |
+---------------------+
4 rows in set (0.00 sec)
현재 날짜로부터 1일 이상인 행 조회하기
다음은 NOW() 함수와 INTERVAL을 조합하여 현재 시점으로부터 1일 이상 경과한 행을 조회하는 쿼리입니다.
mysql> select * from DemoTable1806 where DueDate >= now() - INTERVAL 1 DAY;
실행 결과는 다음과 같습니다.
+---------------------+
| DueDate |
+---------------------+
| 2019-11-29 00:00:00 |
| 2019-11-30 00:00:00 |
+---------------------+
2 rows in set (0.00 sec)
핵심 정리
NOW() - INTERVAL 1 DAY는 현재 시각에서 하루를 뺀 시점을 의미합니다. WHERE 절에서 이 값보다 크거나 같은 DueDate만 필터링하기 때문에, 어제 이후의 데이터만 결과로 반환됩니다. 만약 날짜 단위로 정확히 비교하고 싶다면 NOW() 대신 CURDATE()를 사용할 수도 있습니다. INTERVAL 표현식은 DAY 외에도 HOUR, MONTH, YEAR 등 다양한 단위를 지원하므로, 상황에 맞게 활용하면 유용합니다.