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.