Để tính khoảng cách ngày giữa hai cột DATE (hoặc DATETIME) trên cùng một hàng — ví dụ: ngày vào làm và ngày nghỉ việc, ngày đặt hàng và ngày giao — MySQL dùng hàm DATEDIFF(date1, date2) trả về date1 - date2 (số ngày, có thể âm).
Ví dụ minh họa
Tạo bảng nhân viên (ngày vào làm, ngày nghỉ):
mysql> CREATE TABLE DemoTable1471 (
EmployeeJoiningDate DATE,
EmployeeRelievingDate DATE
);
Chèn dữ liệu:
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');
Dữ liệu:
mysql> SELECT * FROM DemoTable1471;
+---------------------+-----------------------+ | EmployeeJoiningDate | EmployeeRelievingDate | +---------------------+-----------------------+ | 2018-06-21 | 2018-12-21 | | 2017-01-19 | 2019-01-31 | | 2015-12-31 | 2016-03-01 | +---------------------+-----------------------+
Tính số ngày làm việc (Relieving - Joining)
mysql> SELECT DATEDIFF(EmployeeRelievingDate, EmployeeJoiningDate) AS EmployeeWorkDays
FROM DemoTable1471;
Kết quả:
+------------------+ | EmployeeWorkDays | +------------------+ | 183 | | 742 | | 61 | +------------------+
Giải thích
- Hàng 1: 2018-12-21 - 2018-06-21 = 183 ngày.
- Hàng 2: 2019-01-31 - 2017-01-19 = 742 ngày (≈ 2 năm).
- Hàng 3: 2016-03-01 - 2015-12-31 = 61 ngày (tháng 2 năm nhuận 2016 có 29 ngày).
Các hàm liên quan
| Hàm | Trả về | Ví dụ |
|---|---|---|
DATEDIFF(d1, d2) | Số ngày (d1 - d2), bỏ qua giờ | DATEDIFF('2024-01-02', '2024-01-01') = 1 |
TIMESTAMPDIFF(DAY, d1, d2) | Số ngày (d2 - d1) — thứ tự ngược DATEDIFF | TIMESTAMPDIFF(DAY, '2024-01-01', '2024-01-02') = 1 |
TIMESTAMPDIFF(MONTH, d1, d2) | Số tháng tròn giữa 2 ngày | Phức tạp hơn DATEDIFF/30 |
TIMESTAMPDIFF(YEAR, d1, d2) | Số năm tròn (tuổi) | TIMESTAMPDIFF(YEAR, '2000-05-15', CURDATE()) |
Ứng dụng thực tế