Gerd H.: MySQL Alter berechnen mit Schaltjahren

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. :)

  1. 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

    1. 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.

      1. 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

        1. 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 =)

          1. yo,

            PS: Kommst du aus Russland? - wegen dem Namen =)

            bin waschechter berliner, der zurzeit in hamburg ist....

            Ilja