Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Tính chênh lệch thời gian giữa 2 cột datetime trong MySQL

Hàm TIMEDIFF() và TIME_FORMAT()

TIMEDIFF(end, start) trả về INTERVAL (có thể âm). TIME_FORMAT() định dạng hiển thị.

Ví dụ

Tạo bảng chấm công:

CREATE TABLE DemoTable624 (
    PunchIn DATETIME,
    PunchOut DATETIME
);
INSERT INTO DemoTable624 VALUES
('2019-07-14 12:10:00', '2019-07-14 12:50:00'),
('2019-07-14 11:00:00', '2019-07-14 11:30:00');

Tính chênh lệch (PunchIn - PunchOut = âm vì In sớm hơn Out):

SELECT TIME_FORMAT(TIMEDIFF(PunchIn, PunchOut), '%H hrs, %i min.') AS diff
FROM DemoTable624;

Kết quả:

+---------------------------+
| diff                      |
+---------------------------+
| -00 hrs, 40 min.          |
| -00 hrs, 30 min.          |
+---------------------------+

Sửa dấu (muốn dương: Out - In)

SELECT TIME_FORMAT(TIMEDIFF(PunchOut, PunchIn), '%H hrs, %i min.') AS duration
FROM DemoTable624;

Kết quả: 00 hrs, 40 min. và 00 hrs, 30 min.

Các format specifier cho TIME

SpecifierÝ nghĩa
%HGiờ (00-23)
%hGiờ (01-12)
%iPhút (00-59)
%sGiây (00-59)
%fMicroseconds (000000-999999)
%pAM/PM

Tính tổng giờ làm việc (SUM)

Không thể SUM trực tiếp TIME. Cách làm:

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(PunchOut, PunchIn)))) AS total_work
FROM DemoTable624;

Lưu ý

  • TIMEDIFF trả về TIME type (range: -838:59:59 đến 838:59:59). Vượt quá → NULL.
  • Dùng TIMESTAMPDIFF(SECOND, start, end) cho khoảng cách lớn (ngày/giờ).
  • Index trên cột datetime không giúp cho TIMEDIFF trong SELECT (chỉ giúp WHERE).