Du musst lediglich tabelle abändern und gegebenenfalls die Spaltennamen ausbessern.Code:SELECT geburtsdatum,(YEAR(CURRENT_DATE) - YEAR(Geburtsdatum)) - (DATE_FORMAT(CURRENT_DATE, '%d%m') < DATE_FORMAT(Geburtsdatum, '%d%m')) AS Alter FROM tabelle;
Moin moin,
Ich hab in einer DB abgespeichert wann meine Mitgleider Geburtstag haben und würde daraus nun gerne das Alter ausrechnen.
Da ich auch Leute habe die vor 1970 geboren sind, nehme ich das Format Date:
2005-02-20
Jetzt will ich das alter ausrechnen. Bisher hab ichs mal so probiert:
DATEDIFF(CURDATE(),`bday`) AS bday
Das gibt mir die Anzahl der Tage aus die die Person schon lebt :mrgreen: . Ist aber doof weil ich so das Alter nicht genau bestimmen kann. Es gibt ja auch Schaltjahre. Wie kann ich das zuverlässig ausrechnen?
MfG Zen
MySQL AB :: MySQL 5.0 Reference Manual :: 12.5 Date and Time Functions
Du musst lediglich tabelle abändern und gegebenenfalls die Spaltennamen ausbessern.Code:SELECT geburtsdatum,(YEAR(CURRENT_DATE) - YEAR(Geburtsdatum)) - (DATE_FORMAT(CURRENT_DATE, '%d%m') < DATE_FORMAT(Geburtsdatum, '%d%m')) AS Alter FROM tabelle;
Da ich ja nicht so wie du über die Anzahl der Tage rechne, sondern MySQL direkt mit Jahren rechnen lasse, sollte da kein Problem sein.Zitat von Zen
Denke ich jetzt mal, die Abfrage ist allerdings ungetestet.
So sieth das jetzt bei mir aus. Kannst du noch erklären was es genau macht mit dem kleiner <(YEAR(CURDATE()) - YEAR(`bday`)) - (DATE_FORMAT(CURDATE(), '%d%m') < DATE_FORMAT(`bday`, '%d%m')) AS age
?
Danke
Edit: ok ich checks ned. Das vor dem Minus rechnet die Differenz der Jahre aus. Davon zeihst du dann [TAGZAHL][MONATSZAHL] ab??? Warum funtzt das![]()
Geändert von Zen (22.02.2007 um 16:30 Uhr)
ok, aus aktuellem Anlass hier eine nachgereichte Erklärung
(YEAR(CURDATE()) - YEAR(`bday`))
aktuelles Jahr - Geburtsjahr
Dann hat man das Alter, aber das ist das vom Ende des Jahres, also wenn der Geburtstag im aktuellen Jahr schon war.
Hat man aber erst nach heute in diesem Jahr Geburtstag, ist man 1 Jahr jünger. Es wird hier geprüft:
(DATE_FORMAT(CURDATE(), '%d%m') < DATE_FORMAT(`bday`, '%d%m'))
Diese Abfrage liefert true(1) wenn das aktuelle Datum vor dem heutigen Datum liegt, sonst false(0). Das muss also nur abgezogen werden.
TYPO3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)