เมื่อมีสองคอลัมน์วันที่ในแถวเดียวกัน (เช่น วันที่เข้า-ออกงาน, วันที่สั่ง-ส่ง) สามารถคำนวณความต่างวันได้โดยใช้ DATEDIFF(end_date, start_date) โดยตรงใน SELECT
ตัวอย่างการใช้งาน
สร้างตารางพนักงาน (เข้า-ออกงาน):
mysql> CREATE TABLE DemoTable1471 (
-> EmployeeJoiningDate DATE,
-> EmployeeRelievingDate DATE
-> );
เพิ่มข้อมูล:
mysql> INSERT INTO DemoTable1471 VALUES ('2018-06-21', '2018-12-21');
mysql> INSERT INTO DemoTable1471 VALUES ('2017-01-19', '2019-01-31');
mysql> INSERT INTO DemoTable1471 VALUES ('2015-12-31', '2016-03-01');
ดูข้อมูล:
mysql> SELECT * FROM DemoTable1471; +---------------------+-----------------------+ | EmployeeJoiningDate | EmployeeRelievingDate | +---------------------+-----------------------+ | 2018-06-21 | 2018-12-21 | | 2017-01-19 | 2019-01-31 | | 2015-12-31 | 2016-03-01 | +---------------------+-----------------------+
คำนวณจำนวนวันทำงาน (Relieving - Joining):
mysql> SELECT DATEDIFF(EmployeeRelievingDate, EmployeeJoiningDate) AS EmployeeWorkDays
-> FROM DemoTable1471;
ผลลัพธ์:
+------------------+ | EmployeeWorkDays | +------------------+ | 183 | | 742 | | 61 | +------------------+
รายละเอียด DATEDIFF
- DATEDIFF(date1, date2) = date1 - date2 (คืนค่าวันเป็น SIGNED INT)
- ใช้ได้กับ DATE, DATETIME, TIMESTAMP (ใช้ส่วนวันที่อย่างเดียว)
- ค่าบวก = date1 มาหลัง date2, ค่าลบ = date1 มาก่อน date2
ฟังก์ชันวันที่ขั้นสูง
| ฟังก์ชัน | คำอธิบาย | ตัวอย่าง |
|---|---|---|
| TIMESTAMPDIFF(unit, d1, d2) | ความต่างในหน่วยที่กำหนด | TIMESTAMPDIFF(MONTH, start, end) |
| TIMESTAMPDIFF(DAY, d1, d2) | เท่า DATEDIFF แต่ระบุหน่วยชัดเจน | TIMESTAMPDIFF(DAY, '2019-01-01', '2019-01-31') = 30 |
| DATEDIFF(d1, d2) | ความต่างวัน (Simple) | DATEDIFF('2019-01-31', '2019-01-01') = 30 |