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

การหาความต่างวันที่ระหว่างวันที่ปัจจุบันและข้อมูลในตาราง MySQL

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