Tính số ngày chênh lệch với DATEDIFF() và NOW()
Hàm DATEDIFF(date1, date2) trả về số ngày giữa 2 ngày (date1 - date2). Kết hợp với NOW() hoặc CURDATE() để tính khoảng cách từ cột ngày đến hôm nay.
1. Tạo bảng và chèn dữ liệu
mysql> CREATE TABLE DemoTable (AdmissionDate DATE);
Giả sử ngày hiện tại: 2019-09-06
mysql> INSERT INTO DemoTable VALUES
('2019-01-08'), ('2018-09-06'), ('2016-10-26');
2. Xem dữ liệu
mysql> SELECT * FROM DemoTable;
+---------------+ | AdmissionDate | +---------------+ | 2019-01-08 | | 2018-09-06 | | 2016-10-26 | +---------------+
3. Truy vấn: Khoảng cách ngày đến hiện tại
mysql> SELECT DATEDIFF(NOW(), AdmissionDate) FROM DemoTable;
4. Kết quả (tính theo 2019-09-06)
+-------------------------------+ | DATEDIFF(NOW(), AdmissionDate) | +-------------------------------+ | 241 | | 365 | | 1045 | +-------------------------------+
Phân tích:
- 2019-09-06 - 2019-01-08 = 241 ngày
- 2019-09-06 - 2018-09-06 = 365 ngày (đúng 1 năm)
- 2019-09-06 - 2016-10-26 = 1045 ngày
Lưu ý quan trọng:
DATEDIFF()chỉ tính phần NGÀY, bỏ qua giờ phút giâyNOW()trả về DATETIME (có giờ) → tự động cast về DATECURDATE()chỉ trả về DATE → khuyến nghị dùngDATEDIFF(CURDATE(), AdmissionDate)- Kết quả âm nếu date1 < date2 (ngày trong tương lai)
Ứng dụng: Tính tuổi, ngày quá hạn, độ cũ của bản ghi, loyalty days, v.v.
Tính tuổi chính xác (xử lý sinh nhật chưa đến):
SELECT FLOOR(DATEDIFF(CURDATE(), BirthDate) / 365.25) AS Age FROM Users;