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

MySQL에서 두 TIMESTAMP 값의 차이를 초 단위로 구하는 방법

MySQL에서 두 타임스탬프(TIMESTAMP) 사이의 차이를 초 단위로 구하려면 내장 함수인 UNIX_TIMESTAMP()를 활용하면 됩니다. 이 함수는 날짜·시간 값을 유닉스 타임스탬프(초 단위 정수)로 변환해 주기 때문에, 두 값을 빼기만 하면 손쉽게 초 단위 차이를 계산할 수 있습니다.

기본 문법

SELECT UNIX_TIMESTAMP(컬럼명1) - UNIX_TIMESTAMP(컬럼명2) AS 별칭 FROM 테이블명;

그럼 실제 예제를 통해 개념을 살펴보겠습니다. 먼저 테스트용 테이블을 생성합니다.

1. 테이블 생성

mysql> create table DifferenceInSeconds
   -> (
   -> FirstTimestamp TIMESTAMP,
   -> SecondTimestamp TIMESTAMP
   -> );
Query OK, 0 rows affected (0.93 sec)

2. 데이터 삽입

INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다.

mysql> insert into DifferenceInSeconds values('2012-12-12 13:16:55','2012-12-12 13:13:55');
Query OK, 1 row affected (0.31 sec)

mysql> insert into DifferenceInSeconds values('2014-10-11 12:15:50','2014-10-11 12:13:50');
Query OK, 1 row affected (0.19 sec)

mysql> insert into DifferenceInSeconds values('2018-12-14 13:30:53','2018-12-14 13:27:53');
Query OK, 1 row affected (0.21 sec)

3. 저장된 데이터 확인

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

mysql> select *from DifferenceInSeconds;

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

+---------------------+---------------------+
| FirstTimestamp      | SecondTimestamp     |
+---------------------+---------------------+
| 2012-12-12 13:16:55 | 2012-12-12 13:13:55 |
| 2014-10-11 12:15:50 | 2014-10-11 12:13:50 |
| 2018-12-14 13:30:53 | 2018-12-14 13:27:53 |
+---------------------+---------------------+
3 rows in set (0.00 sec)

두 타임스탬프의 초 단위 차이 구하기

이제 UNIX_TIMESTAMP() 함수를 사용해 두 타임스탬프 간의 차이를 초 단위로 계산하는 쿼리를 실행해 보겠습니다.

mysql> SELECT UNIX_TIMESTAMP(FirstTimestamp) - UNIX_TIMESTAMP(SecondTimestamp) as Seconds from DifferenceInSeconds;

결과는 다음과 같습니다.

+---------+
| Seconds |
+---------+
|     180 |
|     120 |
|     180 |
+---------+
3 rows in set (0.00 sec)

첫 번째 행은 180초(3분), 두 번째 행은 120초(2분) 차이가 나는 것을 확인할 수 있습니다.

ABS() 함수로 항상 양수 결과 얻기

참고: 어느 쪽 타임스탬프가 더 큰지 알 수 없는 경우에는 ABS() 함수를 함께 사용하는 것이 좋습니다. ABS()는 절댓값을 반환하기 때문에 두 값의 순서와 관계없이 항상 양수인 차이를 얻을 수 있습니다.

문법은 다음과 같습니다.

SELECT ABS(UNIX_TIMESTAMP(컬럼명1) - UNIX_TIMESTAMP(컬럼명2)) AS Seconds FROM 테이블명;

ABS() 동작 검증하기

위 문법을 확인하기 위해 첫 번째 타임스탬프가 더 작은 값을 가진 레코드를 하나 추가해 보겠습니다.

mysql> insert into DifferenceInSeconds values('2018-12-14 13:26:53','2018-12-14 13:31:53');
Query OK, 1 row affected (0.21 sec)

테이블의 전체 레코드를 다시 조회합니다.

mysql> select *from DifferenceInSeconds;

실행 결과입니다.

+---------------------+---------------------+
| FirstTimestamp      | SecondTimestamp     |
+---------------------+---------------------+
| 2012-12-12 13:16:55 | 2012-12-12 13:13:55 |
| 2014-10-11 12:15:50 | 2014-10-11 12:13:50 |
| 2018-12-14 13:30:53 | 2018-12-14 13:27:53 |
| 2018-12-14 13:26:53 | 2018-12-14 13:31:53 |
+---------------------+---------------------+
4 rows in set (0.00 sec)

이제 ABS() 함수를 적용한 쿼리를 실행해 보겠습니다.

mysql> SELECT ABS(UNIX_TIMESTAMP(FirstTimestamp) - UNIX_TIMESTAMP(SecondTimestamp)) as Seconds from DifferenceInSeconds;

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

+---------+
| Seconds |
+---------+
|     180 |
|     120 |
|     180 |
|     300 |
+---------+
4 rows in set (0.00 sec)

참고: 만약 ABS() 함수를 사용하지 않았다면 마지막 행의 결과는 -300초로 출력되었을 것입니다. 이처럼 두 타임스탬프의 대소 관계를 확신할 수 없다면 ABS()를 사용하는 것이 안전합니다.