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

So sánh chỉ ngày và tháng (bỏ qua năm) trong MySQL

Cách làm: Dùng DATE_FORMAT()

SELECT * FROM bang 
WHERE DATE_FORMAT(cot_ngay, '%m-%d') = DATE_FORMAT('ngay_so_sanh', '%m-%d');

Ví dụ: Tìm sinh nhật ngày 31/01 bất kể năm

Dữ liệu

+----+-------------------+
| Id | compareDayAndTime |
+----+-------------------+
| 1  | 2014-01-31        |
| 2  | 2014-10-11        |
| 3  | 2016-09-12        |
| 4  | 2017-04-25        |
| 5  | 2018-12-25        |
| 6  | 2019-02-27        |
+----+-------------------+

Truy vấn

mysql> SELECT * FROM compareDayAndMonthDemo 
    -> WHERE DATE_FORMAT(compareDayAndTime, '%m-%d') = DATE_FORMAT('2019-01-31', '%m-%d') 
    -> AND Id = 1;

Kết quả

+----+-------------------+
| Id | compareDayAndTime |
+----+-------------------+
| 1  | 2014-01-31        |
+----+-------------------+

Chỉ lấy ngày-tháng

mysql> SELECT DATE_FORMAT(compareDayAndTime, '%m-%d') AS DayAndMonthOnly 
    -> FROM compareDayAndMonthDemo 
    -> WHERE DATE_FORMAT(compareDayAndTime, '%m-%d') = DATE_FORMAT('2019-01-31', '%m-%d') 
    -> AND Id = 1;
+-----------------+
| DayAndMonthOnly |
+-----------------+
| 01-31           |
+-----------------+

Các format thường dùng

  • %m-%d: 01-31 (tháng-ngày)
  • %d-%m: 31-01 (ngày-tháng)
  • %m/%d: 01/31
  • %d/%m: 31/01

Lưu ý hiệu năng: Dùng function trên cột trong WHERE làm mất index. Với bảng lớn, cân nhắc thêm cột computed/virtual column lưu tháng-ngày.