Mysql
 sql >> Base de données >  >> RDS >> Mysql

trouver si un anniversaire arrive dans n jours dans MySql

Comme d'autres l'ont dit, vous devez ignorer l'année dans votre comparaison. La fonction DAYOFYEAR() est un moyen de le faire.

Voici une solution rapide sur le dessus de ma tête. Il renverra tous les anniversaires dans les 10 prochains jours, même si c'est fin décembre et que l'anniversaire est l'année prochaine.

Il NE gère PAS correctement les années bissextiles, il sera donc décalé d'un jour pour les anniversaires du début mars si cette année est une année bissextile et que la personne n'est pas née dans une année bissextile ou vice-versa. Les années bissextiles feront également apparaître les anniversaires du début de janvier un jour de congé à la fin de décembre parfois. Si quelqu'un veut ajouter la correction des années bissextiles, n'hésitez pas :)

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