Wie gesagt der Ansatz war nicht Schaltjahr sicher.
So ist es richtig:
-----------------
select name from person where
(YEAR(CURDATE())-YEAR(geb)) - (RIGHT(CURDATE(),5)<RIGHT(geb,5))
<>
(YEAR(date_add(CURDATE(), INTERVAL 7 day))-YEAR(geb)) - (RIGHT(date_add(CURDATE(), INTERVAL 7 day),5)<RIGHT(geb,5))
-----------------
Erklärung:
YEAR(CURDATE())-YEAR(geb) = Jahresdifferenz heutiges Datum - Geb Datum
(RIGHT(CURDATE(),5)<RIGHT(geb,5) = wenn (MM-DD heute < MM-DD Geb Datum) ist der Ausdruck 1 ansonsten 0, d.h. ziehe ein Jahr ab, wenn die Person im aktuellen Jahr noch keinen Geb hatte.
Also liefert dir der Ausdruck:
(YEAR(CURDATE())-YEAR(geb)) - (RIGHT(CURDATE(),5)<RIGHT(geb,5))
das aktuelle Alter der Person
Das ganze nun auch für 7 Tage später ausrechnen:
(YEAR(date_add(CURDATE(), INTERVAL 7 day))-YEAR(geb)) - (RIGHT(date_add(CURDATE(), INTERVAL 7 day),5)<RIGHT(geb,5))
so, sind diese beiden Jahres Werte ungleich (deswegen das <>)
Hat die Person innerhalb der nächsten 7 Tage Geburtstag.
Gruß Jaraz