ฟังก์ชัน 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;