Tính khoảng cách ngày từ cột ngày đến hôm nay trong MySQL
Sử dụng DATEDIFF() kết hợp STR_TO_DATE() để chuyển chuỗi ngày sang DATE rồi tính chênh lệch với CURDATE().
Cú pháp
SELECT DATEDIFF(CURDATE(), STR_TO_DATE(yourColumnName, '%d-%m-%Y')) AS alias FROM yourTableName;
Ví dụ: Tính số ngày từ các ngày đến hôm nay
Tạo bảng (cột ArrivalDate kiểu VARCHAR định dạng dd-mm-yyyy):
mysql> CREATE TABLE DateDifferenceDemo (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> ArrivalDate VARCHAR(100)
-> );
Chèn dữ liệu:
mysql> INSERT INTO DateDifferenceDemo(ArrivalDate) VALUES
('12-10-2011'), ('01-12-2013'), ('31-10-2014'),
('12-04-2016'), ('20-08-2018'), ('11-03-2019');
Dữ liệu:
+----+-------------+ | Id | ArrivalDate | +----+-------------+ | 1 | 12-10-2011 | | 2 | 01-12-2013 | | 3 | 31-10-2014 | | 4 | 12-04-2016 | | 5 | 20-08-2018 | | 6 | 11-03-2019 | +----+-------------+
Tính số ngày chênh lệch (giả sử hôm nay là 2019-03-12):
mysql> SELECT DATEDIFF(CURDATE(), STR_TO_DATE(ArrivalDate, '%d-%m-%Y')) AS NumberOfDays FROM DateDifferenceDemo;
Kết quả:
+--------------+ | NumberOfDays | +--------------+ | 2708 | | 1927 | | 1593 | | 1064 | | 204 | | 1 | +--------------+
Giải thích
STR_TO_DATE(ArrivalDate, '%d-%m-%Y'): Chuyển chuỗi 'dd-mm-yyyy' thành DATECURDATE(): Ngày hiện tại (không có giờ)DATEDIFF(date1, date2): Trả về date1 - date2 (số ngày, có thể âm)
Các biến thể
- Cột đã là DATE:
DATEDIFF(CURDATE(), date_column)(không cần STR_TO_DATE) - Tính tuổi:
FLOOR(DATEDIFF(CURDATE(), birthdate) / 365.25) - Ngày trong tương lai: Kết quả âm → dùng
ABS()hoặc đổi thứ tự tham số
Lưu ý
- Định dạng trong STR_TO_DATE phải khớp chính xác dữ liệu
- CURDATE() dùng múi giờ server
- Với DATETIME, dùng
DATE()để lấy phần ngày:DATEDIFF(CURDATE(), DATE(datetime_col))