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

MySQL WHERE 절에서 날짜 차이로 행을 선택하는 방법 – TIMESTAMPDIFF() 활용법

MySQL TIMESTAMPDIFF()로 날짜 차이 계산 후 행 선택하기

MySQL의 WHERE 절에서 두 날짜·시간 값 사이의 차이를 계산하여 조건에 맞는 행을 선택하려면 TIMESTAMPDIFF() 함수를 사용하면 됩니다. 이 함수는 두 datetime 값의 차이를 지정한 단위(초, 분, 시간, 일 등)로 반환해 주므로, 특정 시점 기준으로 일정 범위 안에 있는 데이터를 손쉽게 조회할 수 있습니다.


1. 테이블 생성

먼저 datetime 타입의 컬럼을 가진 테이블을 생성합니다.

mysql> create table demo42
-> (
-> start_date datetime
-> );
Query OK, 0 rows affected (0.77 sec)

2. 데이터 삽입

INSERT 명령을 사용해 테이블에 레코드를 추가합니다.

mysql> insert into demo42 values('2020-01-10 12:30:05');
Query OK, 1 row affected (0.11 sec)

mysql> insert into demo42 values('2019-02-24 10:40:45');
Query OK, 1 row affected (0.11 sec)

mysql> insert into demo42 values('2020-05-12 05:45:55');
Query OK, 1 row affected (0.17 sec)

mysql> insert into demo42 values('2020-05-12 05:40:55');
Query OK, 1 row affected (0.15 sec)

mysql> insert into demo42 values('2020-05-12 05:42:55');
Query OK, 1 row affected (0.11 sec)

3. 저장된 데이터 조회

SELECT 문으로 테이블에 저장된 레코드를 확인합니다.

mysql> select *from demo42;

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

+---------------------+
| start_date |
+---------------------+
| 2020-01-10 12:30:05 |
| 2019-02-24 10:40:45 |
| 2020-05-12 05:45:55 |
| 2020-05-12 05:40:55 |
| 2020-05-12 05:42:55 |
+---------------------+
5 rows in set (0.00 sec)

4. TIMESTAMPDIFF를 활용한 조건 조회

다음은 TIMESTAMPDIFF 함수를 사용해 기준 시각 '2020-05-12 05:40:55'와의 시간 차이가 5분 미만인 행만 선택하는 쿼리입니다. ABS() 함수로 절댓값을 구했기 때문에 기준 시점보다 이전인 경우와 이후인 경우 모두 조회됩니다.

mysql> select *from demo42
-> where ABS(TIMESTAMPDIFF(MINUTE,start_date, '2020-05-12 05:40:55')) < 5;

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

+---------------------+
| start_date |
+---------------------+
| 2020-05-12 05:40:55 |
| 2020-05-12 05:42:55 |
+---------------------+
2 rows in set (0.00 sec)

결과를 보면 기준 시각과의 차이가 5분 미만인 두 개의 행만 반환된 것을 확인할 수 있습니다. TIMESTAMPDIFF()의 첫 번째 인자에는 MINUTE 외에도 SECOND, HOUR, DAY, MONTH, YEAR 등 다양한 단위를 지정할 수 있으므로, 조회 목적에 맞게 단위를 변경하여 활용하시면 됩니다.