Testato sul classico db Northwind:
codice:
SELECT birthdate,
Datediff(Year, birthdate, getdate())
- CASE WHEN
Dateadd(Year, Datediff(Year, birthdate, getdate()),
birthdate) > getdate()
THEN 1 ELSE 0
END AS Anni
FROM employees
Il risultato lo vedi nella tabella sottostante.
Nota che lo script tiene conto anche del giorno e mese di nascita, rispetto all'anno,
Se usassi solo il primo enunciato senza il CASE:
Datediff(Year, birthdate, getdate())
vedresti che il 1° record restituirebbe 62 anni, invece di 61, e sarebbe sbagliato perchè l'impiegato, essendo nato a dicembre, non ha ancora compiuto gli anni.
codice:
birthdate anni
08/12/1948 61
19/02/1952 58
30/08/1963 46
19/09/1937 72
04/03/1955 55
02/07/1963 46
29/05/1960 49
09/01/1958 52
27/01/1966 44