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

Tính tổng thời gian dựa trên giây trong MySQL (SEC_TO_TIME, TIME_TO_SEC)


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ờ.