Giới thiệu
Để cộng các giá trị TIME trong MySQL, chuyển từng giá trị sang giây bằng TIME_TO_SEC(), cộng tổng giây, rồi chuyển ngược lại TIME bằng SEC_TO_TIME().
Ví dụ minh họa
Tạo bảng và chèn dữ liệu
mysql> CREATE TABLE DemoTable (
LogoutTime TIME
);
mysql> INSERT INTO DemoTable VALUES
('5:50:00'), ('6:10:10'), ('8:00:50');
Xem dữ liệu
mysql> SELECT * FROM DemoTable;
+------------+ | LogoutTime | +------------+ | 05:50:00 | | 06:10:10 | | 08:00:50 | +------------+
Truy vấn tính tổng thời gian
mysql> SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(LogoutTime))) FROM DemoTable;
Kết quả
+-------------------------------------------+ | SEC_TO_TIME(SUM(TIME_TO_SEC(LogoutTime))) | +-------------------------------------------+ | 20:01:00 | +-------------------------------------------+
Tổng: 5h50m + 6h10m10s + 8h0m50s = 20h1m0s.
Giải thích
TIME_TO_SEC('05:50:00')= 5*3600 + 50*60 = 21000 giây.SUM(...)cộng tất cả giây.SEC_TO_TIME(72060)= 20:01:00.
⚠️ Giới hạn SEC_TO_TIME
SEC_TO_TIME trả về kiểu TIME, phạm vi: -838:59:59 đến 838:59:59.
Nếu tổng giây > 3020399 (≈ 838 giờ), sẽ bị cắt bớt hoặc trả về NULL tùy version.
Giải pháp cho tổng lớn: Tự format
SELECT CONCAT(
FLOOR(total_seconds / 3600), ':',
LPAD(FLOOR((total_seconds % 3600) / 60), 2, '0'), ':',
LPAD(total_seconds % 60, 2, '0')
) AS total_time
FROM (
SELECT SUM(TIME_TO_SEC(LogoutTime)) AS total_seconds FROM DemoTable
) t;
Cách này không giới hạn giờ.