ฟังก์ชัน DATEDIFF() ใน MySQL ใช้คำนวณจำนวนวันระหว่างสองวันที่ (date1 - date2) คืนค่าจำนวนเต็ม (บวก/ลบ/ศูนย์) ใช้ได้กับชนิดข้อมูล DATE และ DATETIME (จะใช้เฉพาะส่วนวันที่)
ไวยากรณ์
DATEDIFF(date1, date2)
คืนค่า: date1 - date2 (จำนวนวัน)
ตัวอย่างการใช้งาน
สร้างตารางวันที่ครบกำหนด:
mysql> CREATE TABLE DemoTable1446 (DueDate DATE);
เพิ่มข้อมูล:
mysql> INSERT INTO DemoTable1446 VALUES ('2019-01-21');
mysql> INSERT INTO DemoTable1446 VALUES ('2019-02-01');
mysql> INSERT INTO DemoTable1446 VALUES ('2019-09-30');
ดูข้อมูลและวันที่ปัจจุบัน:
mysql> SELECT * FROM DemoTable1446; +------------+ | DueDate | +------------+ | 2019-01-21 | | 2019-02-01 | | 2019-09-30 | +------------+ mysql> SELECT CURDATE(); +------------+ | curdate() | +------------+ | 2019-10-01 | +------------+
คำนวณความต่างวันจากวันที่ปัจจุบัน:
mysql> SELECT DATEDIFF(CURDATE(), DueDate) FROM DemoTable1446;
ผลลัพธ์:
+-----------------------------+ | DATEDIFF(CURDATE(), DueDate) | +-----------------------------+ | 253 | | 242 | | 1 | +-----------------------------+
ฟังก์ชันวันที่ที่เกี่ยวข้อง
| ฟังก์ชัน | คำอธิบาย | ตัวอย่าง |
|---|---|---|
| DATEDIFF(d1, d2) | ความต่างวัน (d1 - d2) | DATEDIFF('2019-10-01', '2019-09-29') = 2 |
| TIMESTAMPDIFF(unit, d1, d2) | ความต่างในหน่วยที่กำหนด | TIMESTAMPDIFF(MONTH, '2019-01-01', '2019-10-01') = 9 |
| TIMEDIFF(t1, t2) | ความต่างเวลา (TIME) | TIMEDIFF('10:00', '09:30') = '00:30:00' |
| DATE_ADD(date, INTERVAL) | บวกช่วงเวลา | DATE_ADD('2019-10-01', INTERVAL 7 DAY) |
| DATE_SUB(date, INTERVAL) | ลบช่วงเวลา | DATE_SUB('2019-10-01', INTERVAL 1 MONTH) |
การประยุกต์ใช้
- คำนวณอายุ:
FLOOR(DATEDIFF(CURDATE(), BirthDate) / 365.25) - เช็คเกินกำหนด:
DATEDIFF(CURDATE(), DueDate) > 0(Overdue) - เตือนก่อนหมดอายุ:
DATEDIFF(ExpiryDate, CURDATE()) BETWEEN 1 AND 30 - รายงานอายุหนี้ (Aging Report): จัดกลุ่มตามช่วงวันค้าง
ข้อควรระวัง
- DATEDIFF ไม่สนใจส่วนเวลา (ถ้าเป็น DATETIME จะใช้เฉพาะวันที่)
- ผลลัพธ์เป็น SIGNED INTEGER (อาจเป็นลบ หาก date1 < date2)
- สำหรับความแม่นยำสูง (รวมเวลา) ให้ใช้ TIMESTAMPDIFF(SECOND, ...) หรือ UNIX_TIMESTAMP()