MySQL에서 두 타임스탬프(timestamp) 사이의 차이를 초 단위로 계산하려면 내장 함수인 TIMEDIFF()와 TIME_TO_SEC()를 함께 사용하면 됩니다. TIMEDIFF()는 두 시간 값의 차이를 계산하고, TIME_TO_SEC()는 그 결과를 초 단위 숫자로 변환해 줍니다.
기본 문법
두 타임스탬프의 차이를 초 단위로 구하는 기본 쿼리 문법은 다음과 같습니다.
SELECT time_to_sec(timediff(컬럼명1, 컬럼명2)) AS 별칭 FROM 테이블명;
예제 테이블 생성하기
개념을 이해하기 위해 먼저 예제로 사용할 테이블을 만들어 보겠습니다. 아래 쿼리로 TimeToSecond라는 이름의 테이블을 생성합니다.
mysql> CREATE TABLE TimeToSecond -> ( -> MyTime timestamp, -> YourTime timestamp -> ); Query OK, 0 rows affected (0.48 sec)
데이터 삽입하기
테이블 생성이 완료되면 날짜와 시간 값을 몇 개 삽입합니다.
mysql> INSERT INTO TimeToSecond VALUES('2016-05-10 10:02:00','2016-05-10 10:00:00');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO TimeToSecond VALUES('2016-05-10 10:06:00','2016-05-10 10:03:00');
Query OK, 1 row affected (0.24 sec)
mysql> INSERT INTO TimeToSecond VALUES('2018-05-10 11:00:00','2018-05-10 10:00:00');
Query OK, 1 row affected (0.08 sec)저장된 데이터 확인하기
INSERT가 정상적으로 완료되었다면 SELECT 문을 사용해 테이블에 저장된 전체 레코드를 확인할 수 있습니다.
mysql> SELECT * FROM TimeToSecond;
실행 결과는 다음과 같습니다.
+---------------------+---------------------+ | MyTime | YourTime | +---------------------+---------------------+ | 2016-05-10 10:02:00 | 2016-05-10 10:00:00 | | 2016-05-10 10:06:00 | 2016-05-10 10:03:00 | | 2018-05-10 11:00:00 | 2018-05-10 10:00:00 | +---------------------+---------------------+ 3 rows in set (0.00 sec)
두 타임스탬프의 차이를 초 단위로 조회하기
이제 앞서 살펴본 문법을 적용하여 두 타임스탬프의 차이를 초 단위로 구해 보겠습니다.
mysql> SELECT time_to_sec(timediff(MyTime, YourTime)) AS DifferenceInSeconds FROM TimeToSecond;
실행 결과는 다음과 같습니다.
+---------------------+ | DifferenceInSeconds | +---------------------+ | 120 | | 180 | | 3600 | +---------------------+ 3 rows in set (0.00 sec)
결과 해석
출력 결과를 보면 각 행의 차이가 초 단위로 정확히 계산된 것을 확인할 수 있습니다.
- 첫 번째 행: 10:02:00과 10:00:00의 차이 → 120초(2분)
- 두 번째 행: 10:06:00과 10:03:00의 차이 → 180초(3분)
- 세 번째 행: 11:00:00과 10:00:00의 차이 → 3600초(1시간)
참고로, 인자의 순서를 바꾸면 결과값의 부호가 반대로 나오므로, 항상 더 늦은 시간을 첫 번째 인자로 넣는 것이 좋습니다. 또한 두 시간의 차이가 24시간을 초과하는 경우에도 TIMEDIFF()는 올바른 값을 반환하지만, 음수나 큰 값 처리가 필요하다면 UNIX_TIMESTAMP() 함수를 활용해 두 값의 차를 직접 계산하는 방법도 고려할 수 있습니다.