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

Tìm bản ghi ngày sau ngày cụ thể từ cột VARCHAR trong MySQL

Khi cột lưu ngày dưới dạng VARCHAR, dùng STR_TO_DATE() chuyển sang DATE/DATETIME rồi so sánh.

Ví dụ minh họa

Tạo bảng (cột VARCHAR):

mysql> CREATE TABLE DemoTable1364 (ShippingDate VARCHAR(100));

Chèn dữ liệu (định dạng dd-mm-yyyy hh:mm:ss):

mysql> INSERT INTO DemoTable1364 VALUES('01-09-2019 12:34:55'), ('01-07-2018 17:10:00'), ('24-09-2019 10:31:22'), ('20-09-2018 13:00:00');

Xem dữ liệu:

mysql> SELECT * FROM DemoTable1364;
+---------------------+
| ShippingDate        |
+---------------------+
| 01-09-2019 12:34:55 |
| 01-07-2018 17:10:00 |
| 24-09-2019 10:31:22 |
| 20-09-2018 13:00:00 |
+---------------------+

Tìm ngày sau '2019-09-21 10:31:20' (chuyển cả 2 vế sang DATETIME):

mysql> SELECT * FROM DemoTable1364
    WHERE STR_TO_DATE(ShippingDate, '%d-%m-%Y %H:%i:%s') > STR_TO_DATE('2019-09-21 10:31:20', '%Y-%m-%d %H:%i:%s');

Kết quả (chỉ 24-09-2019):

+---------------------+
| ShippingDate        |
+---------------------+
| 24-09-2019 10:31:22 |
+---------------------+

⚠️ Hiệu năng: STR_TO_DATE() trên cột khiến không dùng được index. Giải pháp:

  • Thêm cột DATE/DATETIME mới, cập nhật từ VARCHAR, index cột mới.
  • MySQL 8.0: Functional index INDEX ((STR_TO_DATE(ShippingDate, '%d-%m-%Y %H:%i:%s'))).
  • Luôn lưu ngày giờ bằng kiểu DATE/DATETIME/TIMESTAMP, không dùng VARCHAR.