MySQL에서 두 날짜·시간(datetime) 값 사이의 차이를 시간 단위로 구하고 싶다면 TIMESTAMPDIFF() 함수를 사용하면 됩니다. 여기에 ABS() 함수를 함께 사용하면 시작 시간과 종료 시간의 순서와 관계없이 항상 양수인 절대값을 얻을 수 있습니다.
기본 문법
SELECT ABS(TIMESTAMPDIFF(HOUR,yourColumnName1,yourColumnName2)) as anyVariableName from yourTableName;
문법을 제대로 이해하기 위해 실제 테이블을 만들어 예제를 살펴보겠습니다.
1. 테이블 생성
먼저 시작 시간과 종료 시간을 저장할 테이블을 생성합니다.
mysql> create table DifferenceInHours -> ( -> StartDateTime datetime, -> EndDateTime datetime -> ); Query OK, 0 rows affected (0.59 sec)
2. 데이터 삽입
INSERT 명령어를 사용해 샘플 레코드를 몇 개 입력합니다.
mysql> insert into DifferenceInHours values('2018-12-20 10:00:00', '2018-12-19 12:00:00');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DifferenceInHours values('2018-12-20 11:00:00', '2018-12-19 11:00:00');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DifferenceInHours values('2018-12-20 10:30:00', '2018-12-19 11:00:00');
Query OK, 1 row affected (0.13 sec)3. 전체 데이터 조회
SELECT 문으로 테이블에 저장된 모든 레코드를 확인합니다.
mysql> select *from DifferenceInHours;
출력 결과
+---------------------+---------------------+ | StartDateTime | EndDateTime | +---------------------+---------------------+ | 2018-12-20 10:00:00 | 2018-12-19 12:00:00 | | 2018-12-20 11:00:00 | 2018-12-19 11:00:00 | | 2018-12-20 10:30:00 | 2018-12-19 11:00:00 | +---------------------+---------------------+ 3 rows in set (0.00 sec)
시간 차이 계산 쿼리
이제 TIMESTAMPDIFF() 함수에 HOUR 단위를 지정하여 두 datetime 값의 차이를 시간 단위로 계산합니다.
mysql> SELECT ABS(TIMESTAMPDIFF(HOUR,StartDateTime,EndDateTime)) as Hour from DifferenceInHours;
실행 결과, 각 행별 시간 차이가 다음과 같이 출력됩니다.
+------+ | Hour | +------+ | 22 | | 24 | | 23 | +------+ 3 rows in set (0.00 sec)
이처럼 TIMESTAMPDIFF(HOUR, ...)를 사용하면 분 단위까지 포함된 시각(예: 10:30)이라도 시간 단위로 자동 반올림되어 처리됩니다. 만약 더 정밀한 계산이 필요하다면 MINUTE나 SECOND 단위를 지정한 후 직접 변환하는 방법도 활용할 수 있습니다.