Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

descobrindo se um aniversário está chegando em n dias no MySql


Como outros já afirmaram, você precisa ignorar o ano em sua comparação. A função DAYOFYEAR() é uma maneira de fazer isso.

Aqui está uma solução rápida em cima da minha cabeça. Ele retornará todos os aniversários nos próximos 10 dias, mesmo que seja final de dezembro e o aniversário seja no próximo ano.

Ele NÃO lida com anos bissextos corretamente, portanto, será desativado em 1 dia para aniversários do início de março se este ano for um ano bissexto e a pessoa não tiver nascido em um ano bissexto ou vice-versa. Os anos bissextos também farão com que os aniversários do início de janeiro apareçam com um dia de folga no final de dezembro às vezes. Se alguém quiser adicionar a correção do ano bissexto, fique à vontade :)
SELECT birthdate 
FROM Anniversaries 
WHERE dayofyear(birthdate) - dayofyear(curdate()) between 0 and 10 
or dayofyear(birthdate) + 365 - dayofyear(curdate()) between 0 and 10;