Để tính số ngày giữa ngày hiện tại và ngày nhập học (lưu dưới dạng chuỗi 'dd/mm/yyyy'), dùng DATEDIFF() kết hợp STR_TO_DATE() để chuyển chuỗi thành DATE.
Công thức
DATEDIFF(CURDATE(), STR_TO_DATE(cot_chuoi, '%d/%m/%Y'))
CURDATE(): ngày hiện tại (không giờ).STR_TO_DATE(str, format): parse chuỗi theo định dạng.DATEDIFF(date1, date2): trả vềdate1 - date2(số ngày, có thể âm).
Ví dụ minh họa
Giả sử hôm nay 2019-10-26.
mysql> CREATE TABLE DemoTable (JoiningDate VARCHAR(40));
mysql> INSERT INTO DemoTable VALUES
-> ('10/10/1998'), ('31/12/2010'), ('01/01/2017'), ('25/10/2019');
mysql> SELECT DATEDIFF(CURDATE(), STR_TO_DATE(JoiningDate, '%d/%m/%Y'))
-> FROM DemoTable;
Kết quả:
+---------------------------------------------------------+ | DATEDIFF(CURDATE(), STR_TO_DATE(JoiningDate, '%d/%m/%Y')) | +---------------------------------------------------------+ | 7686 | -- 10/10/1998 | 3221 | -- 31/12/2010 | 1028 | -- 01/01/2017 | 1 | -- 25/10/2019 (hôm qua) +---------------------------------------------------------+
Các định dạng STR_TO_DATE phổ biến
| Chuỗi nhập | Format |
|---|---|
| '10/10/1998' | '%d/%m/%Y' |
| '1998-10-10' | '%Y-%m-%d' |
| '10 Oct 1998' | '%d %b %Y' |
| '10/10/1998 14:30' | '%d/%m/%Y %H:%i' |
Lưu ý
- Nên lưu ngày tháng kiểu
DATE/DATETIMEthay vì VARCHAR – tiết kiệm, có index, tính toán trực tiếp không cần parse. - Nếu đã lưu VARCHAR, hãy thêm cột
DATEgenerated column (MySQL 5.7+):joining_date DATE AS (STR_TO_DATE(JoiningDate, '%d/%m/%Y')) STORED+ index. DATEDIFFtrả về số nguyên (có thể âm nếu date2 > date1).