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

Tính khoảng cách ngày từ cột DATE đến ngày hiện tại trong MySQL

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ây
  • NOW() trả về DATETIME (có giờ) → tự động cast về DATE
  • CURDATE() chỉ trả về DATE → khuyến nghị dùng DATEDIFF(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;