Oft kommt es in Anwendungen vor, dass man nicht nur das Geburtsdatum einer Person angezeigt haben möchte, sondern ebenfalls dessen Alter. Eine einfache Sache, denkt man. Es gibt auch schon auch eine Reihe von Ansätzen dafür im Internet. Jetzt will ich auch meine Variante dazu beitragen.
Viele Varianten wandeln das Datum in eine Zahl und experimentieren dann irgendwie mit der Zahl 365.25. Ich möchte hier eine andere Variante zum Besten geben. Basis soll die Funktion datediff sein. Man könnte denken, dass diese Funktion bereits die Lösung bietet. Jedoch ermittelt diese die Differenz mit puren Zahlenwerten ohne Beachtung von Monat und Tag.
Mein Algorithmus lautet wie folgt:
- Ermittle mit der Funktion datediff die Differenz zwischen dem Geburtstag und dem heutigen Jahr.
- Berechne den Geburtstag der Person in diesem Jahr.
- Fall der Geburtstag dieses Jahr noch nicht war, ziehe ein Jahr ab von der Differenz der Jahre.
- Ansonsten gib die Differenz der Jahre aus.
Der SELECT-Befehl sieht dann wie folgt aus:
SELECT LastName, BirthDate, CASE WHEN DATEADD(YEAR, DATEDIFF(YEAR, BirthDate, GETDATE()), BirthDate) > GETDATE() THEN DATEDIFF(YEAR, BirthDate, GETDATE()) - 1 ELSE DATEDIFF(YEAR, BirthDate, GETDATE()) END AS "Alter" FROM Employees