Mysql
 sql >> Database >  >> RDS >> Mysql

trovare se un anniversario sta arrivando tra n giorni in MySql

Come altri hanno affermato, devi ignorare l'anno nel tuo confronto. La funzione DAYOFYEAR() è un modo per farlo.

Ecco una soluzione rapida dalla cima della mia testa. Restituirà tutti i compleanni nei prossimi 10 giorni, anche se è fine dicembre e il compleanno è l'anno prossimo.

NON gestisce correttamente gli anni bisestili, quindi sarà disattivato di 1 giorno per i primi compleanni di marzo se quest'anno è bisestile e la persona non è nata in un anno bisestile o viceversa. Gli anni bisestili porteranno anche i compleanni all'inizio di gennaio a presentarsi un giorno libero alla fine di dicembre, a volte. Se qualcuno vuole aggiungere la correzione dell'anno bisestile, si senta libero :)

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