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

หาความต่างระหว่าง 2 Timestamp เป็นวันใน MySQL ใช้ DATEDIFF


ฟังก์ชัน DATEDIFF()

DATEDIFF(date1, date2) คืนค่าความต่างเป็นจำนวนวัน (date1 - date2) ไม่สนใจส่วนเวลา:

SELECT DATEDIFF(date_column1, date_column2) AS day_diff
FROM your_table;

ตัวอย่างการใช้งาน

สร้างตารางมี 2 คอลัมน์ Timestamp

CREATE TABLE DifferenceTimestamp (
    IssueTime TIMESTAMP,
    DueTime TIMESTAMP
);

เพิ่มข้อมูล (IssueTime = NOW, DueTime = ย้อนหลัง)

INSERT INTO DifferenceTimestamp VALUES
(NOW(), DATE_ADD(NOW(), INTERVAL -30 DAY)),
(NOW(), DATE_ADD(NOW(), INTERVAL -24 DAY)),
(NOW(), DATE_ADD(NOW(), INTERVAL -5 DAY));

ข้อมูล (สมมติ NOW = 2018-12-07 17:48)

+---------------------+---------------------+
| IssueTime           | DueTime             |
+---------------------+---------------------+
| 2018-12-07 17:48:28 | 2018-11-07 17:48:28 |
| 2018-12-07 17:48:40 | 2018-11-13 17:48:40 |
| 2018-12-07 17:48:46 | 2018-12-02 17:48:46 |
+---------------------+---------------------+

คำสั่งหาความต่างวัน

SELECT DATEDIFF(IssueTime, DueTime) AS DifferenceInTimestampDays
FROM DifferenceTimestamp;

ผลลัพธ์

+---------------------------+
| DifferenceInTimestampDays |
+---------------------------+
| 30                        |
| 24                        |
| 5                         |
+---------------------------+

คุณสมบัติสำคัญ

  • คืนค่า Signed Integer (บวก/ลบได้)
  • ไม่สนใจส่วนเวลา เปรียบเทียบเฉพาะวันที่ (DATE part)
  • DATEDIFF('2024-01-02 23:59', '2024-01-01 00:01') = 1

ฟังก์ชันคำนวณความต่างอื่นๆ

ฟังก์ชัน หน่วย ตัวอย่าง
DATEDIFF(d1, d2) วัน DATEDIFF('2024-01-10', '2024-01-01') = 9
TIMESTAMPDIFF(UNIT, d1, d2) MICROSECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR TIMESTAMPDIFF(HOUR, '2024-01-01 10:00', '2024-01-01 15:30') = 5
TIMEDIFF(t1, t2) TIME (HH:MM:SS) TIMEDIFF('15:30:00', '10:00:00') = '05:30:00'

แนะนำ: ใช้ TIMESTAMPDIFF

TIMESTAMPDIFF ยืดหยุ่นกว่า รองรับหลายหน่วย และจัดการ Edge Cases ได้ดีกว่า

SELECT TIMESTAMPDIFF(DAY, DueTime, IssueTime) AS days_diff
FROM DifferenceTimestamp;