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

หาความต่างเวลาเป็นชั่วโมงใน MySQL ด้วย TIMESTAMPDIFF

ฟังก์ชัน TIMESTAMPDIFF() ใน MySQL คำนวณความต่างระหว่างสอง Datetime/Timestamp ในหน่วยที่ระบุ (MICROSECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR)

รูปแบบคำสั่ง

TIMESTAMPDIFF(unit, datetime_expr1, datetime_expr2)
-- คืนค่า: datetime_expr2 - datetime_expr1 (ในหน่วย unit)

ตัวอย่าง: หาความต่างเป็นชั่วโมง

1. สร้างตาราง Start/End DateTime

mysql> CREATE TABLE DifferenceInHours (
    -> StartDateTime DATETIME,
    -> EndDateTime DATETIME
    -> );
Query OK, 0 rows affected (0.59 sec)

mysql> INSERT INTO DifferenceInHours VALUES 
    -> ('2018-12-20 10:00:00', '2018-12-19 12:00:00'),
    -> ('2018-12-20 11:00:00', '2018-12-19 11:00:00'),
    -> ('2018-12-20 10:30:00', '2018-12-19 11:00:00');

2. ดูข้อมูล

mysql> SELECT * FROM DifferenceInHours;
+---------------------+---------------------+
| StartDateTime       | EndDateTime         |
+---------------------+---------------------+
| 2018-12-20 10:00:00 | 2018-12-19 12:00:00 |
| 2018-12-20 11:00:00 | 2018-12-19 11:00:00 |
| 2018-12-20 10:30:00 | 2018-12-19 11:00:00 |
+---------------------+---------------------+
3 rows in set (0.00 sec)

3. คำนวณความต่างเป็นชั่วโมง (ใช้ ABS เพื่อค่าสัมบูรณ์)

mysql> SELECT ABS(TIMESTAMPDIFF(HOUR, StartDateTime, EndDateTime)) AS Hour 
    -> FROM DifferenceInHours;
+------+
| Hour |
+------+
| 22   |
| 24   |
| 23   |
+------+
3 rows in set (0.00 sec)

หน่วยเวลา (Unit) ที่รองรับ

Unitคำอธิบาย
MICROSECONDไมโครวินาที
SECONDวินาที
MINUTEนาที
HOURชั่วโมง
DAYวัน
WEEKสัปดาห์
MONTHเดือน
QUARTERไตรมาส
YEARปี

TIMESTAMPDIFF vs DATEDIFF vs TIMEDIFF

ฟังก์ชันคืนค่าหน่วยรองรับ Timezone
TIMESTAMPDIFF(unit, dt1, dt2)Integerระบุได้ (YEAR..MICROSECOND)✅ ใช่ (TIMESTAMP)
DATEDIFF(dt1, dt2)Integerวัน (dt1 - dt2)❌ ไม่ (DATE only)
TIMEDIFF(dt1, dt2)TIMEเวลา (HH:MM:SS)❌ ไม่
TIMESTAMPDIFF(SECOND, dt1, dt2)Integerวินาที✅ ใช่

ตัวอย่างเพิ่มเติม

อายุ (ปี) จากวันเกิด

SELECT TIMESTAMPDIFF(YEAR, birth_date, CURDATE()) AS age FROM users;

ระยะเวลาทำงาน (นาที)

SELECT TIMESTAMPDIFF(MINUTE, clock_in, clock_out) AS work_minutes FROM attendance;

คำนวณค่าเช่า/ค่าจอดรถ (ชั่วโมง ปัดขึ้น)

SELECT CEIL(TIMESTAMPDIFF(MINUTE, start_time, end_time) / 60.0) AS hours_charged
FROM parking_log;

ข้อควรระวัง

  • ลำดับอาร์กิวเมนต์: TIMESTAMPDIFF(unit, earlier, later) → คืนค่าบวก
  • หากสลับกัน จะได้ค่าติดลบ → ใช้ ABS() หากต้องการค่าสัมบูรณ์
  • TIMESTAMP คำนวณใน UTC (Session Timezone) ส่วน DATETIME คำนวณตรงตัว
  • ประสิทธิภาพ: ดีมาก ใช้ Index ได้หากมี Index บนคอลัมน์ Datetime