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

Lấy ngày lớn nhất từ danh sách ngày lưu dưới dạng VARCHAR trong MySQL


Vấn đề

Khi ngày tháng được lưu dưới dạng chuỗi VARCHAR (ví dụ: 'Sunday, 11 August 2019'), bạn không thể so sánh trực tiếp được. Cần chuyển đổi sang kiểu DATE/DATETIME trước khi dùng MAX().

Giải pháp: STR_TO_DATE()

Hàm STR_TO_DATE(str, format) chuyển chuỗi thành DATE theo định dạng chỉ định.

Ví dụ minh họa

Tạo bảng và chèn dữ liệu

mysql> CREATE TABLE DemoTable (
    AdmissionDate VARCHAR(100)
);
mysql> INSERT INTO DemoTable VALUES 
('Sunday, 11 August 2019'), 
('Friday, 18 October 2019'), 
('Thursday, 18 July 2019');

Truy vấn lấy ngày lớn nhất

mysql> SELECT MAX(STR_TO_DATE(AdmissionDate, '%W, %d %M %Y')) AS MaxDate 
FROM DemoTable;

Kết quả

+------------+
| MaxDate    |
+------------+
| 2019-10-18 |
+------------+

Giải thích định dạng

Ký tựÝ nghĩa
%WTên ngày trong tuần đầy đủ (Sunday, Monday...)
%dNgày trong tháng (01-31)
%MTên tháng đầy đủ (January, February...)
%YNăm 4 chữ số

Lưu ý quan trọng

  • Định dạng trong STR_TO_DATE phải khớp chính xác với dữ liệu (khoảng trắng, dấu phẩy, chữ hoa/thường).
  • Nên lưu ngày tháng bằng kiểu DATE/DATETIME thay vì VARCHAR để tránh phiền toái và lỗi so sánh.
  • Với dữ liệu lớn, việc chuyển đổi từng dòng khi truy vấn chậm. Cân nhắc thêm cột DATE đã chuyển đổi hoặc view.