Vì đây được ngày càng nhiều là một câu hỏi mã golf, đây là cách tiếp cận của tôi vào giải quyết này bao gồm việc chăm sóc của năm nhuận:
select *
from user
where (date_format(from_unixtime(birthday),"%m-%d") = date_format(now(),"%m-%d"))
or (date_format(from_unixtime(birthday),"%m-%d") = '02-29'
and date_format('%m') = '02'
and last_day(now()) = date(now())
);
Giải thích: Đầu tiên mệnh đề where kiểm tra nếu sinh nhật của ai đó là ngày hôm nay. Thứ hai đảm bảo chỉ chọn những người có ngày sinh vào ngày 29 tháng 2 nếu ngày hiện tại bằng ngày cuối cùng của tháng Hai.
Ví dụ:
SELECT last_day('2009-02-01'); -- gives '2009-02-28'
SELECT last_day('2000-02-01'); -- gives '2009-02-29'
SELECT last_day('2100-02-01'); -- gives '2100-02-28'
Nguồn
2010-02-07 23:12:14
Như một mặt lưu ý: ' sinh nhật được lưu trữ dưới dạng dấu thời gian unix': Bạn nên suy nghĩ về việc thay đổi điều này thành sử dụng DATETIME. Dấu thời gian chỉ có thể lưu trữ ngày từ 1970-01-01 đến khoảng năm 2038. Khi người dùng đầu tiên nhập ngày sinh trước năm 1970, bạn sẽ gặp lỗi. Kiểm tra với các tài liệu trên mysql! –
Bạn có thể giả định tất cả người dùng của mình ở cùng một múi giờ không? –