Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

การรวมเวลา (TIME) ใน MySQL ด้วย TIME_TO_SEC และ SEC_TO_TIME

ชนิดข้อมูล TIME ใน MySQL ไม่สามารถใช้ SUM() โดยตรงได้ เพราะ SUM() ทำงานกับตัวเลข ต้องแปลงเวลาเป็นวินาที (SECOND) ก่อน รวมกัน แล้วค่อยแปลงกลับเป็น TIME

หลักการ

SEC_TO_TIME( SUM( TIME_TO_SEC(time_column) ) )

ตัวอย่างการใช้งาน

สร้างตารางเวลา:

mysql> CREATE TABLE DemoTable1442 (DueTime TIME);

เพิ่มข้อมูล:

mysql> INSERT INTO DemoTable1442 VALUES ('00:08:00');
mysql> INSERT INTO DemoTable1442 VALUES ('00:04:00');
mysql> INSERT INTO DemoTable1442 VALUES ('12:55:00');

ดูข้อมูล:

mysql> SELECT * FROM DemoTable1442;
+----------+
| DueTime  |
+----------+
| 00:08:00 |
| 00:04:00 |
| 12:55:00 |
+----------+

รวมเวลาทั้งหมด:

mysql> SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(DueTime))) AS TotalTime FROM DemoTable1442;

ผลลัพธ์ (8 นาที + 4 นาที + 12 ชม. 55 นาที = 13 ชม. 07 นาที):

+-----------+
| TotalTime |
+-----------+
| 13:07:00  |
+-----------+

ฟังก์ชันที่เกี่ยวข้อง

ฟังก์ชันคำอธิบาย
TIME_TO_SEC(time)แปลง TIME เป็นวินาทีทั้งหมด
SEC_TO_TIME(seconds)แปลงวินาทีเป็น TIME
TIMEDIFF(time1, time2)หาความต่างระหว่างสองเวลา
ADDTIME(time1, time2)บวกเวลาสองค่า

กรณี VARCHAR ที่เก็บเวลา

หากคอลัมน์เป็น VARCHAR ที่เก็บเวลา (เช่น '08:30:00') ให้แปลงก่อน:

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(CAST(time_str AS TIME)))) FROM table_name;

ข้อจำกัด

  • TIME ใน MySQL รองรับช่วง -838:59:59 ถึง 838:59:59 หากผลรวมเกินจะเกิดข้อผิดพลาด
  • สำหรับผลรวมที่ใหญ่ ควรคำนวณเป็นวินาที/นาที/ชั่วโมงแยกต่างหาก แล้วจัดรูปแบบเอง

การประยุกต์ใช้

  • คำนวณเวลาทำงานรวมจากเวลาเข้า-ออก
  • รวมระยะเวลาการโทร/ประชุม/วิดีโอ
  • คำนวณ SLA การตอบสนองเฉลี่ย
  • สรุปเวลาใช้งานเครื่องจักร/เซิร์ฟเวอร์