It would not be perfect - for example, this is not quite right, because of 2012 being a leap year:declare @BirthDate date, @CheckDateA date, @CheckDateB dateselect @Birthdate='20110225',@CheckDateA='20120225',@CheckDateB='20130225'select CAST(datediff(dd, @BirthDate, @CheckDateA)/365.25 AS INT),CAST(datediff(dd, @BirthDate, @CheckDateB)/365.25 AS INT)
On Feb 25, 2012 the age is reported as 0, yet on Feb 25, 2013, the age is reported as two.An unambiguous way to calculate age (which relies on the ordering when date is expressed in YYYYMMDD format being correct when expressed as an int) is as follows:declare @BirthDate date, @CheckDateA date, @CheckDateB dateselect @Birthdate='20110225',@CheckDateA='20120225',@CheckDateB='20130225'SELECT (CAST(CONVERT(CHAR(8), @CheckDateA, 112) AS INT) - CAST(CONVERT(CHAR(8), @BirthDate, 112) AS INT) )/10000, (CAST(CONVERT(CHAR(8), @CheckDateB, 112) AS INT) - CAST(CONVERT(CHAR(8), @BirthDate, 112) AS INT) )/10000