MySQL에서 현재 시간 기준으로 일정 시간(예: 2분) 이후에 기록된 데이터만 조회하고 싶다면 DATE_SUB() 함수와 NOW() 함수를 함께 활용하면 됩니다. 이 글에서는 예제 테이블을 만들고, 실제 쿼리를 통해 원하는 결과를 얻는 과정을 단계별로 살펴보겠습니다.
1. 예제 테이블 생성
먼저 날짜·시간 값을 저장할 컬럼을 가진 테이블을 생성합니다.
mysql> create table DemoTable1335
-> (
-> ArrivalTime datetime
-> );
Query OK, 0 rows affected (0.49 sec)
2. 샘플 데이터 삽입
INSERT 명령을 사용하여 날짜·시간(datetime) 레코드를 여러 개 삽입합니다.
mysql> insert into DemoTable1335 values('2019-09-19 22:54:00');
Query OK, 1 row affected (0.46 sec)
mysql> insert into DemoTable1335 values('2019-09-19 22:59:00');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1335 values('2019-09-19 22:56:00');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable1335 values('2019-09-19 22:52:00');
Query OK, 1 row affected (0.11 sec)3. 전체 레코드 확인
SELECT 문으로 테이블에 저장된 모든 레코드를 조회합니다.
mysql> select * from DemoTable1335;
실행 결과는 다음과 같습니다.
+---------------------+
| ArrivalTime |
+---------------------+
| 2019-09-19 22:54:00 |
| 2019-09-19 22:59:00 |
| 2019-09-19 22:56:00 |
| 2019-09-19 22:52:00 |
+---------------------+
4 rows in set (0.00 sec)
4. 현재 시간 확인
NOW() 함수로 현재 날짜와 시간을 확인합니다.
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2019-09-19 22:55:53 |
+---------------------+
1 row in set (0.00 sec)
5. 특정 시간 이후의 레코드 조회하기
이제 핵심 쿼리입니다. 아래 쿼리는 현재 시간에서 2분을 뺀 시점(DATE_SUB(now(), interval 2 minute))보다 늦은 ArrivalTime 값을 가진 레코드만 선택합니다.
mysql> select *from DemoTable1335 where ArrivalTime > date_sub(now(),interval 2 minute);
실행 결과는 다음과 같습니다.
+---------------------+
| ArrivalTime |
+---------------------+
| 2019-09-19 22:59:00 |
| 2019-09-19 22:56:00 |
+---------------------+
2 rows in set (0.00 sec)
쿼리 동작 원리
DATE_SUB(date, INTERVAL n unit) 함수는 지정한 날짜에서 일정 간격만큼 뺀 값을 반환합니다. 위 예제에서는 NOW()로 구한 현재 시각에서 2분을 빼고, 그 결과보다 큰(즉, 더 최근인) 타임스탬프만 WHERE 조건으로 필터링했습니다.
INTERVAL 단위는 필요에 따라 자유롭게 변경할 수 있습니다. 예를 들어 30분 전 이후의 데이터를 조회하려면 interval 30 minute, 3시간 전 이후라면 interval 3 hour, 하루 전 이후라면 interval 1 day처럼 작성하면 됩니다. 이 방식은 로그 분석, 실시간 모니터링, 최근 활동 내역 조회 등 다양한 상황에서 유용하게 활용할 수 있습니다.