มี 2 วิธีหลักในการคำนวณความต่างของ Timestamp 2 ค่าเป็นวินาทีใน MySQL
วิธีที่ 1: TIMESTAMPDIFF() - แนะนำ (MySQL Native)
SELECT TIMESTAMPDIFF(SECOND, '2018-10-17 11:51:55', '2018-10-17 11:51:58');
-- ผลลัพธ์: 3
Syntax
TIMESTAMPDIFF(unit, datetime_expr1, datetime_expr2)
-- คืนค่า: datetime_expr2 - datetime_expr1 (ในหน่วย unit)
Units ที่รองรับ
MICROSECOND,SECOND,MINUTE,HOUR,DAY,WEEK,MONTH,QUARTER,YEAR
ตัวอย่างเพิ่มเติม
-- ความต่างในนาที
SELECT TIMESTAMPDIFF(MINUTE, '2024-01-01 10:00:00', '2024-01-01 10:30:00');
-- 30
-- ความต่างในวัน (Date Only)
SELECT TIMESTAMPDIFF(DAY, '2024-01-01', '2024-01-10');
-- 9
-- ใช้กับ Column
SELECT
created_at,
updated_at,
TIMESTAMPDIFF(SECOND, created_at, updated_at) AS processing_seconds
FROM orders;
วิธีที่ 2: UNIX_TIMESTAMP() - แปลงเป็น Epoch Seconds
SELECT UNIX_TIMESTAMP('2018-10-17 11:57:50') - UNIX_TIMESTAMP('2018-10-17 11:57:45')
AS DifferenceInSeconds;
-- ผลลัพธ์: 5
ข้อควรระวัง UNIX_TIMESTAMP
- คืนค่าเป็น Integer (วินาทีจาก 1970-01-01 UTC)
- ขึ้นกับ Timezone ของ Session (แปลงจาก Local Time ไป UTC)
- Year 2038 Problem (32-bit signed integer overflow)
เปรียบเทียบ
| คุณสมบัติ | TIMESTAMPDIFF | UNIX_TIMESTAMP Diff |
|---|---|---|
| หน่วยเวลา | ยืดหยุ่น (Second - Year) | Second เท่านั้น |
| Timezone Handling | ใช้ Datetime Literal ตรงๆ | แปลงเป็น UTC ก่อนลบ |
| Precision | รองรับ Microsecond (MySQL 8.0+) | Second เท่านั้น (เว้นแต่ UNIX_TIMESTAMP(6)) |
| Performance | เร็วกว่าเล็กน้อย | คำนวณ 2 ครั้ง |
| Portability | MySQL Specific | Standard-ish |
แนะนำ
- ✅ ใช้ TIMESTAMPDIFF(SECOND, start, end) สำหรับความต่างวินาที
- ✅ ใช้ TIMESTAMPDIFF หน่วยอื่น (MINUTE, HOUR, DAY) ได้เลย
- ⚠️ UNIX_TIMESTAMP เหมาะสำหรับการคำนวณทางคณิตศาสตร์หรือ Export ไประบบอื่น