Christian: (MySQL) nächsten 3 Geburtstage auslesen

Hi,

ich habe in meiner MySQL-Datenbank Geburtstage von vielen Leuten gespeichert und möchte nun die nächsten 3 Geburtstage auslesen (also die Leute, die als nächstes Geburtstag haben).

Ich habe diese Problem zwar gelöst, aber wie ich finde sehr umständlich. (Mit substrings, und zusammenfügen, und irgendwie die Strings subtrahiert mit dem aktuellen Datum, ...) Naja, ziemlich unelegant. Da das noch aus der Zeit stammte als ich noch keine DB zur verfügung hatte.

SELECT id, name, vorname, geburtsdatum, YEAR(FROM_DAYS(TO_DAYS(NOW()) - TO_DAYS(geburtsdatum))) AS age, DATE_FORMAT(geburtsdatum, '%d') AS birthday, DATE_FORMAT(geburtsdatum, '%m') AS birthmonth, YEAR(geburtsdatum) AS birthyear, SUBSTRING(DATE_FORMAT(NOW(), '%Y%m%d') - DATE_FORMAT(geburtsdatum, '%Y%m%d'), 3, 7) AS dif FROM abi01er ORDER BY dif DESC LIMIT 3

so lautet die Abfrage! ziemlich scheiße, findet ihr nicht auch?!

das Jahr soll natürlich nicht berücksichtigt werden!

Bsp.:
1965-05-09
1970-12-11
1967-01-31
1971-08-20

rauskommen soll aus heutiger Sicht (die nächsten 3 Geburtstage):
1971-08-20
1970-12-11
1967-01-31

Gibts da ne einfachere Möglichkeit??

Gruß
Christian

  1. Oi,

    SELECT id, name, vorname, geburtsdatum, YEAR(FROM_DAYS(TO_DAYS(NOW()) - TO_DAYS(geburtsdatum))) AS age, DATE_FORMAT(geburtsdatum, '%d') AS birthday, DATE_FORMAT(geburtsdatum, '%m') AS birthmonth, YEAR(geburtsdatum) AS birthyear, SUBSTRING(DATE_FORMAT(NOW(), '%Y%m%d') - DATE_FORMAT(geburtsdatum, '%Y%m%d'), 3, 7) AS dif FROM abi01er ORDER BY dif DESC LIMIT 3

    so lautet die Abfrage! ziemlich scheiße, findet ihr nicht auch?!

    Ja. Man sollte meinen, daß Du bei der Suche nach dieser Sammlung exotischer Datumsfunktionen auch über die grundlegende Stringfunktion RIGHT() gestolpert wärest. Schau Dir die mal an!

    HTH Robert