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

Lọc ngày theo tháng cụ thể trong MySQL (cột VARCHAR)


Giới thiệu

Khi cột ngày được lưu dưới dạng VARCHAR (chuỗi) với định dạng 'YYYY-MM-DD', có thể dùng toán tử LIKE để lọc theo tháng/năm mà không cần chuyển đổi kiểu.

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 
('2018-01-21'), ('2019-08-13'), ('2019-07-08'), ('2016-02-12');

Truy vấn lọc tháng 8 năm 2019

mysql> SELECT * FROM DemoTable WHERE AdmissionDate LIKE '2019-08%';

Kết quả

+---------------+
| AdmissionDate |
+---------------+
| 2019-08-13    |
+---------------+

Phân tích

  • Định dạng chuỗi phải nhất quán: 'YYYY-MM-DD'.
  • LIKE '2019-08%' khớp tất cả ngày trong tháng 8/2019.
  • Không dùng index hiệu quả (full table scan) vì dùng LIKE với wildcard ở cuối.

Cách tốt hơn: Chuyển đổi và dùng hàm DATE

-- Nếu cột là DATE/DATETIME
SELECT * FROM DemoTable WHERE MONTH(AdmissionDate) = 8 AND YEAR(AdmissionDate) = 2019;

-- Hoặc dùng BETWEEN (tận dụng index)
SELECT * FROM DemoTable 
WHERE AdmissionDate >= '2019-08-01' AND AdmissionDate < '2019-09-01';

Khuyến nghị

Nên lưu ngày tháng bằng kiểu DATE/DATETIME thay vì VARCHAR để:

  • Đảm bảo tính toàn vẹn dữ liệu (invalid date không thể insert).
  • Tận dụng index cho truy vấn phạm vi (range query).
  • Dùng được các hàm DATE/TIME built-in.