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

So sánh ngày lưu dưới dạng VARCHAR với ngày hiện tại trong MySQL

Vấn đề: Cột VARCHAR chứa ngày (dd/mm/yyyy)

Cần chuyển sang DATE để so sánh với CURDATE().

Tạo bảng

mysql> CREATE TABLE DemoTable1397 (
    -> AdmissionDate VARCHAR(40)
    -> );
Query OK, 0 rows affected (0.97 sec)
mysql> INSERT INTO DemoTable1397 VALUES
    -> ('01/04/2019'),('27/09/2019'),('29/09/2018'),('29/09/2019');

Dữ liệu

mysql> SELECT * FROM DemoTable1397;
+---------------+
| AdmissionDate |
+---------------+
| 01/04/2019    |
| 27/09/2019    |
| 29/09/2018    |
| 29/09/2019    |
+---------------+

Ngày hiện tại

mysql> SELECT CURDATE();
+------------+
| CURDATE()  |
+------------+
| 2019-09-27 |
+------------+

Truy vấn: STR_TO_DATE chuyển đổi rồi so sánh

mysql> SELECT * FROM DemoTable1397
    -> WHERE STR_TO_DATE(AdmissionDate, '%d/%m/%Y') > CURDATE();

Kết quả: Chỉ ngày 29/09/2019 > 2019-09-27

+---------------+
| AdmissionDate |
+---------------+
| 29/09/2019    |
+---------------+

Mẹo: Luôn lưu ngày theo kiểu DATE/DATETIME. Nếu buộc phải VARCHAR, hãy tạo index trên cột ảo (generated column) đã chuyển đổi để tối ưu truy vấn.