Поскольку это все больше и больше становится вопросом игры в гольф, вот мой подход к решению этой проблемы, включая заботу о високосных годах:
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())
);
Объяснение: Первый пункт, где проверяется, сегодня ли у кого-то день рождения.
Второй обеспечивает выбор только тех, чей день рождения 29 февраля, только если текущий день равен последнему дню февраля.
Примеры:
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'