PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Geburtstage



Turbohummel
25-01-2006, 12:05
Hallo,

ich stehe hier grade vor einem interessanten Problem. Wahrscheinlich ist es so trivial, dass ich einfach nicht drauf komm:

In der Nutzer-Datenbank steht ein Feld "geburtstag" vom typ "date". Jetzt will ich einen Tag vor dem Geburtstag per Cron eine Mail an diejenigen schicken, die den User als "persönlichen Kontakt" eingetragen haben.

Nur das Problem: Wie bekomme raus, wann da jetzt jemand Geburtstag hat. Problem sind die Schaltjahre, denn wenn ein Schaltjahr ist, wird die Mail nach dem 29. Feb immer erst am Tag des Geburtstages versandt, also einen Tag zu spät.

Meinen bisherigen Query halte ich mal zurück, da ihr sonst nur auf dumme Gedanken kommt.

Schonmal danke für die Hilfe.

stefaan
25-01-2006, 12:42
Servus!

Du kannst ja die MySQL-Datumsfunktion verwenden. Die sollte richtig rechnen ;)
Ein nächtlicher Cronjob erledingt dir die Abfrage.

Du fragst einfach ab:
SELECT irgendwas FROM tabelle
WHERE DATE_FORMAT(spalte, '%d-%m') = DATE_FORMAT(DATE_ADD(CURDATE, INTERVAL 1 DAY), '%d-%m');

Ungetestet, geht möglicherweise auch eleganter...

Grüße, Stefan

Jasper
25-01-2006, 12:42
unter oracle:

SQL> select to_date('2004-02-29','YYYY-MM-DD')-1 notify from dual;

NOTIFY
---------
28-FEB-04


-j

Turbohummel
25-01-2006, 13:11
SELECT irgendwas FROM tabelle
WHERE DATE_FORMAT(spalte, '%d-%m') = DATE_FORMAT(DATE_ADD(CURDATE, INTERVAL 1 DAY), '%d-%m');
Args, natürlich. An den Teil mit dem Interval hab ich natürlich nicht gedacht. Danke. Ich nehme trotzdem weitere Vorschläge an.

Turbohummel
25-01-2006, 21:11
Nachtrag: Es gab noch ein Problem mit dem 1.1. jeden Jahres, das konnte ich aber selbst lösen.