Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Hàm DATE trong MySQL: Tính khoảng ngày giữa ngày hiện tại và ngày nhập học

Để 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ậpFormat
'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/DATETIME thay 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 DATE generated column (MySQL 5.7+): joining_date DATE AS (STR_TO_DATE(JoiningDate, '%d/%m/%Y')) STORED + index.
  • DATEDIFF trả về số nguyên (có thể âm nếu date2 > date1).