ชนิดข้อมูล 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 การตอบสนองเฉลี่ย
- สรุปเวลาใช้งานเครื่องจักร/เซิร์ฟเวอร์