Khi cột ngày lưu dưới dạng chuỗi (VARCHAR), dùng STR_TO_DATE() trong ORDER BY để sắp xếp đúng thời gian, sau đó LIMIT 1 lấy hàng đầu/đuôi.
Tạo bảng và dữ liệu
mysql> CREATE TABLE DemoTable (DueDate VARCHAR(100)); Query OK, 0 rows affected (1.16 sec)
mysql> INSERT INTO DemoTable VALUES('10-06-2019'), ('01-12-2016'), ('31-01-2018');
Query OK, 3 rows affected (0.42 sec)
Truy vấn lấy ngày sớm nhất
mysql> SELECT * FROM DemoTable ORDER BY STR_TO_DATE(DueDate, '%d-%m-%Y') LIMIT 1;
Kết quả:
+------------+ | DueDate | +------------+ | 01-12-2016 | +------------+ 1 row in set (0.00 sec)
Để lấy ngày muộn nhất: ORDER BY STR_TO_DATE(DueDate, '%d-%m-%Y') DESC LIMIT 1
Hiệu suất: Không dùng index. Nên chuyển cột sang kiểu DATE thực.