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

Lấy số ngày giữa ngày hiện tại và cột ngày trong MySQL?

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 DATE
  • CURDATE(): 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))