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

คำนวณจำนวนวันระหว่างวันที่เริ่มและสิ้นสุดด้วย DATEDIFF() ใน MySQL

การหาจำนวนวันระหว่างสองวันที่ด้วย DATEDIFF()

ฟังก์ชัน DATEDIFF(date1, date2) คืนค่าความต่างเป็น **จำนวนวัน (Integer)** date1 - date2 ใช้ ABS() เพื่อให้ได้ค่าบวกเสมอ

Syntax

SELECT ABS(DATEDIFF(start_date, end_date)) AS days_diff FROM table_name;

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

สร้างตารางช่วงวันที่:

mysql> CREATE TABLE DemoTable730 (
    StartDate DATE,
    EndDate DATE
);
Query OK, 0 rows affected (0.45 sec)

mysql> INSERT INTO DemoTable730 VALUES 
    ('2019-01-21', '2019-07-21'),
    ('2018-10-11', '2018-12-31'),
    ('2016-01-01', '2016-12-31');
Query OK, 3 rows affected

ข้อมูลทั้งหมด:

mysql> SELECT * FROM DemoTable730;
+------------+------------+
| StartDate  | EndDate    |
+------------+------------+
| 2019-01-21 | 2019-07-21 |
| 2018-10-11 | 2018-12-31 |
| 2016-01-01 | 2016-12-31 |
+------------+------------+
3 rows in set (0.00 sec)

คำนวณจำนวนวันในแต่ละช่วง:

mysql> SELECT ABS(DATEDIFF(StartDate, EndDate)) AS Days FROM DemoTable730;
+------+
| Days |
+------+
| 181  |
| 81   |
| 365  |
+------+
3 rows in set (0.00 sec)

รายละเอียด DATEDIFF

  • DATEDIFF('2019-07-21', '2019-01-21') = 181 (บวก)
  • DATEDIFF('2019-01-21', '2019-07-21') = -181 (ลบ)
  • ABS() ทำให้เป็นบวกเสมอ
  • ไม่นับเวลา (Time Component) - เฉพาะ Date
  • รวมวันเริ่มต้น ไม่นับวันสิ้นสุด (Difference)

ฟังก์ชันวันที่เกี่ยวข้อง

  • TIMESTAMPDIFF(unit, dt1, dt2) - ความต่างในหน่วยที่ระบุ (DAY, HOUR, MINUTE, SECOND, MONTH, YEAR)
  • TIMESTAMPDIFF(DAY, '2019-01-21', '2019-07-21') = 181
  • DATE_ADD / DATE_SUB - บวก/ลบช่วงเวลา
  • DATEDIFF vs TIMESTAMPDIFF - DATEDIFF เร็วกว่า แต่ TIMESTAMPDIFF ยืดหยุ่นกว่า

การประยุกต์: คำนวณอายุ

SELECT FLOOR(DATEDIFF(CURDATE(), birth_date) / 365.25) AS age FROM users;