Hello,
Ok, letzter Anlauf.
Der Fehler rührte daher, weil MySQL keine Leerzeichen (oder Whitespaces) zwischen dem Funktionsnamen und der öffnenden Klammer duldet.
Die Abfrage müsste mMn nun aber so benutztbar sein, wenn sie auch recht unhandlich geworden ist. Ich würde auf jeden Fall eine benutzerdefinierte Funktion daraus machen.
select * from zeit
where datediff(
date_add(now(), interval 7 day),
if(
month(birthday) = 2 and day(birthday)= 29 and DAYOFYEAR(CONCAT(YEAR(NOW()),'-12-31')) = 365,
concat(YEAR(NOW()),'-03-01'),
if(
month(now()) = 12 and day(now()) > (31-7),
concat((YEAR(NOW())+1),'-',month(birthday),'-',day(birthday)),
concat(YEAR(NOW()),'-',month(birthday),'-',day(birthday))
)
)
)
between 0 and 7
;
Wenn der Geburtstag auf einen 29. Februar fällt und das Jahr kein Schaltjahr ist, muss der Geburtstag korrigiert werden auf den (in DE) 01.03.
Da er aber nun auf den 01.03. fällt, muss nicht geprüft werden, ob er in die letzte Woche des Jahres fällt (da war meine boolesche Algebra also doch nicht für den A....). Wenn es sich aber um ein gültiges Datum handelt (also auch ein 29. Februar in einem Schaltjahr) regelt MySQL alles, bis auf die letzte Woche. Die muss nun noch kontrolliert werden. Der Stichtag dann ins nächste Jahr verschoben.
Jetzt muss nur noch überlegt werden, ob 8 (0 bis 7) oder 7 Tage betrachtet werden sollen.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg