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

MySQL 쿼리로 시간 차이를 확인하는 방법 완벽 가이드

데이터베이스 작업을 하다 보면 현재 시간 기준으로 일정 시간 이내의 레코드만 조회해야 하는 경우가 자주 발생합니다. 예를 들어 최근 5시간 안에 도착한 데이터만 추출하고 싶다면 INTERVAL 키워드를 활용하면 간단하게 처리할 수 있습니다. 이번 글에서는 실제 예제를 통해 MySQL에서 시간 차이를 계산하고 원하는 데이터를 조회하는 방법을 단계별로 살펴보겠습니다.

1. 테이블 생성하기

먼저 예제에 사용할 테이블을 생성합니다. 도착 시간(ArrivalTime)을 저장할 datetime 타입의 컬럼 하나로 구성된 간단한 테이블입니다.

mysql> create table DemoTable1570
-> (
-> ArrivalTime datetime
-> );
Query OK, 0 rows affected (0.87 sec)

2. 샘플 데이터 삽입하기

insert 명령문을 사용해 테이블에 여러 개의 날짜·시간 데이터를 입력합니다.

mysql> insert into DemoTable1570 values('2019-10-15 5:10:00');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable1570 values('2019-10-15 23:00:00');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1570 values('2019-10-15 23:10:00');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1570 values('2019-10-15 16:10:00');
Query OK, 1 row affected (0.15 sec)

3. 전체 레코드 확인하기

select 문을 사용해 테이블에 저장된 모든 레코드를 조회합니다.

mysql> select * from DemoTable1570;

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

+---------------------+
| ArrivalTime |
+---------------------+
| 2019-10-15 05:10:00 |
| 2019-10-15 23:00:00 |
| 2019-10-15 23:10:00 |
| 2019-10-15 16:10:00 |
+---------------------+
4 rows in set (0.00 sec)

4. 현재 시간 확인하기

now() 함수를 사용하면 MySQL 서버의 현재 날짜와 시간을 확인할 수 있습니다. 시간 차이를 계산하기 전에 기준 시점을 먼저 파악해 두는 것이 좋습니다.

mysql> select now();

실행 결과는 아래와 같습니다.

+---------------------+
| now() |
+---------------------+
| 2019-10-15 22:26:14 |
+---------------------+
1 row in set (0.00 sec)

5. 시간 차이를 활용한 조건 조회

이제 핵심인 시간 차이 조회 쿼리를 살펴보겠습니다. where 절과 interval 키워드를 함께 사용하면 현재 시각에서 지정한 시간만큼 이전의 시점을 손쉽게 계산할 수 있습니다. 아래 예제는 현재 시간으로부터 5시간 이후에 도착한 레코드만 조회합니다.

mysql> select * from DemoTable1570
-> where ArrivalTime > now() - interval 5 hour;

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

+---------------------+
| ArrivalTime |
+---------------------+
| 2019-10-15 23:00:00 |
| 2019-10-15 23:10:00 |
+---------------------+
2 rows in set (0.00 sec)

정리

현재 시각(22:26) 기준 5시간 전은 17:26이므로, 그 이후의 시간인 '23:00:00'과 '23:10:00' 두 개의 레코드만 반환된 것을 확인할 수 있습니다. 이처럼 now() - interval N hour 패턴을 활용하면 분(minute), 일(day), 주(week) 등 다양한 단위의 시간 차이 조건도 손쉽게 적용할 수 있어 로그 분석, 실시간 모니터링 등 여러 상황에서 유용하게 사용할 수 있습니다.