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

MySQL에서 앞으로 12시간 이내에 도래하는 레코드를 선택하는 쿼리 작성법

현재 시점부터 앞으로 12시간 이내에 도래하는(datetime) 레코드를 조회하려면 DATE_ADD() 함수와 INTERVAL 12 HOUR 구문을 활용하면 됩니다. 이번 글에서는 실제 예제를 통해 단계별로 살펴보겠습니다.

1. 예제 테이블 생성하기

먼저 마감 시각(DueDateTime)을 저장할 테이블을 생성합니다.

mysql> create table DemoTable (DueDateTime datetime);
Query OK, 0 rows affected (0.60 sec)

2. 샘플 데이터 삽입하기

INSERT 명령을 사용해 몇 개의 레코드를 입력합니다.

mysql> insert into DemoTable values('2019-07-12 10:50:30');
Query OK, 1 row affected (0.29 sec)
mysql> insert into DemoTable values('2019-07-12 22:02:00');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable values('2019-07-12 11:12:10');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('2019-07-12 09:02:00');
Query OK, 1 row affected (0.10 sec)

3. 저장된 전체 레코드 확인하기

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

mysql> select *from DemoTable;

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

+---------------------+
| DueDateTime |
+---------------------+
| 2019-07-12 10:50:30 |
| 2019-07-12 22:02:00 |
| 2019-07-12 11:12:10 |
| 2019-07-12 09:02:00 |
+---------------------+
4 rows in set (0.00 sec)

4. 12시간 이내에 도래하는 레코드 조회 쿼리

다음은 앞으로 12시간 안에 도래하는 레코드만 선택하는 핵심 쿼리입니다.

mysql> select *from DemoTable where date_add(DueDateTime,interval 12 hour) BETWEEN NOW() AND
DATE_ADD(NOW(), INTERVAL 12 HOUR);

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

+---------------------+
| DueDateTime |
+---------------------+
| 2019-07-12 10:50:30 |
| 2019-07-12 22:02:00 |
| 2019-07-12 11:12:10 |
+---------------------+
3 rows in set (0.00 sec)

쿼리 동작 원리

이 쿼리는 각 레코드의 DueDateTime에 12시간을 더한 값이, 현재 시각(NOW())부터 12시간 후(DATE_ADD(NOW(), INTERVAL 12 HOUR)) 사이에 포함되는지를 판단합니다. 즉, 해당 레코드가 지금으로부터 최대 12시간 이내에 만료되거나 도래하는 경우에만 결과로 반환됩니다.

위 예제에서는 네 개의 레코드 중 세 개가 조건에 해당하여 반환되었고, 이미 기준 범위를 벗어난 하나의 레코드는 제외된 것을 확인할 수 있습니다. 이러한 방식은 알림 발송, 일정 관리, 마감 임박 항목 필터링 등 다양한 실무 시나리오에서 유용하게 활용할 수 있습니다.