MySQL : How to Calculate Elapse Time or different Time
ในการคำนวนหาค่า”ส่วนต่างของเวลา” (Elapsed Time) ระหว่างค่าเวลา 2 ค่า ในฐานข้อมูล MySQL จะมีฟังก์ชันที่เกี่ยวข้อง 2 ฟังก์ชันคือ
unix_timestamp(date) | ฟังก์ชันที่แปลงค่าเวลา hr:mi:ss ให้กลายเป็นตัวเลขของ timestamp |
sec_to_time(second time) | ฟังก์ชันที่แปลงเลขจาก “วินาที”(second) ให้เป็นเวลา hr:mi:ss |
สำหรับตัวอย่าง มีตารางเก็บบันทึกเวลาเริ่มต้น start_date กับเวลาสิ้นสุด end_date ต้องการหาส่วนต่างของเวลา
start_date | end_date |
2013-11-16 15:29:52 | 2013-11-16 15:49:12 |
2014-01-14 03:54:25 | 2014-01-14 03:54:53 |
2014-01-15 13:26:22 | 2014-01-15 14:16:02 |
2014-01-17 03:44:20 | 2014-01-17 05:04:10 |
2014-01-17 23:54:21 | 2014-01-18 00:24:21 |
จากตัวอย่างเราสามารถใช้ SQL ดังนี้
SELECT start_date, end_date, unix_timestamp(start_date) s_timestamp, unix_timestamp(end_date) e_timestamp, (unix_timestamp(end_date)-unix_timestamp(start_date)) diff, sec_to_time(unix_timestamp(end_date)-unix_timestamp(start_date)) elapse_time FROM `logtab` order by start_date; |
ซึ่งได้ผลลัพธ์แบบนี้ครับ
start_date | end_date | s_timestamp | e_timestamp | diff | elapse_time |
2013-11-16 15:29:52 | 2013-11-16 15:49:12 | 1384590592 | 1384591752 | 1160 | 00:19:20 |
2014-01-14 03:54:25 | 2014-01-14 03:54:53 | 1389646465 | 1389646493 | 28 | 00:00:28 |
2014-01-15 13:26:22 | 2014-01-15 14:16:02 | 1389767182 | 1389770162 | 2980 | 00:49:40 |
2014-01-17 03:44:20 | 2014-01-17 05:04:10 | 1389905060 | 1389909850 | 4790 | 01:19:50 |
2014-01-17 23:54:21 | 2014-01-18 00:24:21 | 1389977661 | 1389979461 | 1800 | 00:30:00 |
ในตัวอย่างแสดงผลการแปลงเวลาให้เป็น unix timestamp จากนั้นหาส่วนต่าง (diff) ซึ่งมีหน่วยเป็นวินาที จากนั้นค่อยใช้ฟังก์ชัน sec_to_time แปลงให้อยู่ในรูปของเวลาที่ดูง่ายขึ้น