sql >> Base de Datos >  >> RDS >> Mysql

encontrar si se acerca un aniversario en n días en MySql

Como han dicho otros, debe ignorar el año en su comparación. La función DAYOFYEAR() es una forma de hacerlo.

Aquí hay una solución rápida de la parte superior de mi cabeza. Devolverá todos los cumpleaños en los próximos 10 días, incluso si es a fines de diciembre y el cumpleaños es el próximo año.

NO maneja correctamente los años bisiestos, por lo que tendrá un error de 1 día para los cumpleaños de principios de marzo si este año es un año bisiesto y la persona no nació en un año bisiesto o viceversa. Los años bisiestos también harán que los cumpleaños de principios de enero aparezcan un día libre a fines de diciembre a veces. Si alguien quiere agregar la corrección del año bisiesto, siéntase libre :)

SELECT birthdate 
FROM Anniversaries 
WHERE dayofyear(birthdate) - dayofyear(curdate()) between 0 and 10 
or dayofyear(birthdate) + 365 - dayofyear(curdate()) between 0 and 10;