• The third solution is clearly incorrect - given a datetime value of 01/26/1978.

    i.e.

    declare @DateOfBirth datetime

    set @DateOfBirth = '1978-01-26 00:00:00.000'

    select @DateOfBirth

    select DATEDIFF(yy, @DateOfBirth, GETDATE())

    select FLOOR(CONVERT(decimal(9, 2), DATEDIFF(d, @DateOfBirth, GETDATE())) / 365.0)

    select DATEDIFF(yy, @DateOfBirth, GETDATE()) - CASE WHEN DATEPART(m, @DateOfBirth) >= DATEPART(m, GETDATE()) AND DATEPART(d, @DateOfBirth) >= DATEPART(d, GETDATE()) THEN 0 ELSE 1 END

    Returns:

    30 - Correct

    30 - Correct

    29 - Incorrect