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

คำนวณความแตกต่างของ Timestamp 2 ค่าเป็นวินาทีใน MySQL

มี 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)

เปรียบเทียบ

คุณสมบัติTIMESTAMPDIFFUNIX_TIMESTAMP Diff
หน่วยเวลายืดหยุ่น (Second - Year)Second เท่านั้น
Timezone Handlingใช้ Datetime Literal ตรงๆแปลงเป็น UTC ก่อนลบ
Precisionรองรับ Microsecond (MySQL 8.0+)Second เท่านั้น (เว้นแต่ UNIX_TIMESTAMP(6))
Performanceเร็วกว่าเล็กน้อยคำนวณ 2 ครั้ง
PortabilityMySQL SpecificStandard-ish

แนะนำ

  • ✅ ใช้ TIMESTAMPDIFF(SECOND, start, end) สำหรับความต่างวินาที
  • ✅ ใช้ TIMESTAMPDIFF หน่วยอื่น (MINUTE, HOUR, DAY) ได้เลย
  • ⚠️ UNIX_TIMESTAMP เหมาะสำหรับการคำนวณทางคณิตศาสตร์หรือ Export ไประบบอื่น