การหาจำนวนวันระหว่างสองวันที่ด้วย 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;