MySQL Alter berechnen mit Schaltjahren
Gerd H.
- datenbank
Hallo,
ich suche nach einer Möglichkeit mir das Alter aus einem Gebursdatum mit dem Format YYYY-MM-DD zu berechnen. Das was mir Probleme bereitet, sind die Schaltjahre.
Folgende Abfrage liefert mir leider falsche Ergebnise:
SELECT (TO_DAYS(NOW())-TO_DAYS(geburtsdatum))/365 AS alter_jahren ...
Nachdem ich diverse Seiten durchgeschaut und nichts gefunden habe, wende ich mich an dieses Forum. :)
yo,
ich suche nach einer Möglichkeit mir das Alter aus einem Gebursdatum mit dem Format YYYY-MM-DD zu berechnen. Das was mir Probleme bereitet, sind die Schaltjahre.
das ist kein wirkliches problem. das erste was du machst ist, das aktuelle jahr zu nehmen (ohne tag und monat) und davon das geburtsjahr (auch wieder ohne tag und monat) abziehen und einem zusätzlichen -1. dann vergleichst du nur noch die monate und die tage (also ohne jahre), ob er in dem aktuellen jahr schon geburtstag hate oder nicht. wenn ja, dann wieder +1.
wenn du willst, kannst du dir das abziehen der -1 bei den jahreszahklen auch sparen. und später dann -1 abziehen, wenn er noch nicht geburtstag hatte.
Ilja
Ilja
SELECT IF (
DATE_FORMAT( geburtsdatum, '%m%d' ) >= DATE_FORMAT( CURDATE( ) , '%m%d' ) , DATE_FORMAT( CURDATE( ) , '%Y' ) - DATE_FORMAT( geburtsdatum, '%Y' ) , DATE_FORMAT( CURDATE( ) , '%Y' ) - DATE_FORMAT( geburtsdatum, '%Y' ) -1
) AS alter_jahre
Ich habe deinen Text jetzt einfach umgesetzt...
Hmm nach deiner Beschreibung sollte das richtig sein?!? Als ERgebnis ist das Alter ein Jahr zu hoch.
yo,
SELECT DATE_FORMAT(CURDATE(), '%Y') - DATE_FORMAT(geburtsdatum, '%Y') -1 + IF (DATE_FORMAT(geburtsdatum, '%m%d') >= DATE_FORMAT( CURDATE(), 1, 0 ) AS alter_jahre
so sieht es meiner meinung nach nach dem aus, was ich gesagt habe.
Ilja
yo,
SELECT DATE_FORMAT(CURDATE(), '%Y') - DATE_FORMAT(geburtsdatum, '%Y') -1 + IF (DATE_FORMAT(geburtsdatum, '%m%d') >= DATE_FORMAT( CURDATE(), 1, 0 ) AS alter_jahre
so sieht es meiner meinung nach nach dem aus, was ich gesagt habe.
Ilja
Ja danke, habe die falsche Reihenfolge in der IF-Schleife gehabt.
So geht es auch:
SELECT IF (
DATE_FORMAT( CURDATE( ), '%m%d' ) >= DATE_FORMAT( geburtsdatum , '%m%d' ) , DATE_FORMAT( CURDATE( ) , '%Y' ) - DATE_FORMAT( geburtsdatum, '%Y' ) , DATE_FORMAT( CURDATE( ) , '%Y' ) - DATE_FORMAT( geburtsdatum, '%Y' ) -1
) AS alter_jahre
Danke dir auf jeden Fall für die Hilfe...PS: Kommst du aus Russland? - wegen dem Namen =)
yo,
PS: Kommst du aus Russland? - wegen dem Namen =)
bin waschechter berliner, der zurzeit in hamburg ist....
Ilja