In Ergänzung zu diesem Beitrag kann man auch folgende Alternativen zur Bestimmung des Alters einer Person verwenden:
DECLARE @geburtstag DATETIME
SET @geburtstag = '23.07.1968'
Alternative 1:
SELECT
DATEDIFF(yy, @geburtstag, GETDATE()) -
CASE
WHEN (MONTH(GETDATE()) * 100 + DAY(GETDATE())) <
(MONTH(@geburtstag)* 100 + DAY(@geburtstag))
THEN 1
ELSE 0
END
-----------
35
(1 row(s) affected)
Alternative 2:
SELECT
(CAST(CONVERT(CHAR(8),GETDATE(), 112) AS INT)
-
CAST(CONVERT(CHAR(8), @geburtstag, 112) AS INT))/10000
-----------
35
(1 row(s) affected)
Alternative 3:
SELECT
YEAR(GETDATE()) - YEAR(@geburtstag) -
(CASE
WHEN (MONTH(@geburtstag) > MONTH(GETDATE()))
OR (MONTH(@geburtstag) = MONTH(GETDATE())
AND DAY(@geburtstag) > DAY(GETDATE()))
THEN 1
ELSE 0 END)
-----------
35
(1 row(s) affected)
Alternative 4:
SELECT
(0+CONVERT(CHAR(8),CURRENT_TIMESTAMP, 112)
-
CONVERT(CHAR(8), @geburtstag, 112))/10000
-----------
35
(1 row(s) affected)
Ich würde aber diese Methode vorziehen, da ich ihr eine bessere Performance zutraue.