• This demonstrates that the datediff solution does not change the age at the time of the birthdate. All the age results are the same:

    declare @BirthDate DATETIME

    set @BirthDate = '08/27/1980'

    print @BirthDate

    print getdate()

    SELECT 'DATEDIFF AGE = ', DATEDIFF(YEAR, @birthdate , GETDATE())

    print 'TODAY IS THE TWENTY-SIXTH'

    set @BirthDate = '08/26/1980'

    print @BirthDate

    print getdate()

    SELECT 'DATEDIFF AGE = ', DATEDIFF(YEAR, @birthdate , GETDATE())

    set @BirthDate = '08/25/1980'

    print @BirthDate

    print getdate()

    SELECT 'DATEDIFF AGE = ', DATEDIFF(YEAR, @birthdate , GETDATE())

    set @BirthDate = '08/24/1980'

    print @BirthDate

    print getdate()

    SELECT 'DATEDIFF AGE = ', DATEDIFF(YEAR, @birthdate , GETDATE())

    The following translates the dates into YYYYMMDD and gets the correct age, changing at at the month and year of the birtdate.

    DECLARE

    @CURRENT_YEAR INTEGER

    , @CURRENT_MONTHS INTEGER

    , @CURRENT_DAYS INTEGER

    , @CURRENT_YYYYMMDD INTEGER

    , @AGE_INTEGER INTEGER

    SET @CURRENT_YEAR = DATEPART(YEAR, GETDATE())

    SET @CURRENT_MONTHS = DATEPART(MONTH, GETDATE())

    SET @CURRENT_DAYS = DATEPART(DAY, GETDATE())

    SET @CURRENT_YYYYMMDD = (@CURRENT_YEAR * 10000) + (@CURRENT_MONTHS * 100) + @CURRENT_DAYS

    SELECT 'CURRENT_DATE = ' , @CURRENT_YYYYMMDD

    declare @BirthDate DATETIME

    , @YEARS INTEGER

    , @MONTHS INTEGER

    , @DAYS INTEGER

    , @BIRTH_YYYYMMDD INTEGER

    set @BirthDate = '08/27/1980'

    set @YEARS = DATEPART(YEAR, @BIRTHDATE)

    SET @MONTHS = DATEPART(MM, @BIRTHDATE)

    SET @DAYS = DATEPART (DD, @BIRTHDATE)

    SET @BIRTH_YYYYMMDD = (@YEARS * 10000) + (@MONTHS * 100) + @DAYS

    SET @AGE_INTEGER = (@CURRENT_YYYYMMDD - @BIRTH_YYYYMMDD) / 10000

    SELECT 'BIRTH DATE = ' , @BIRTH_YYYYMMDD

    SELECT '@AGE_INTEGER = ' , @AGE_INTEGER

    PRINT 'TODAY IS THE TWENTY-SIXTH'

    set @BirthDate = '08/26/1980'

    set @YEARS = DATEPART(YEAR, @BIRTHDATE)

    SET @MONTHS = DATEPART(MM, @BIRTHDATE)

    SET @DAYS = DATEPART (DD, @BIRTHDATE)

    SET @BIRTH_YYYYMMDD = (@YEARS * 10000) + (@MONTHS * 100) + @DAYS

    SET @AGE_INTEGER = (@CURRENT_YYYYMMDD - @BIRTH_YYYYMMDD) / 10000

    SELECT 'BIRTH DATE = ' , @BIRTH_YYYYMMDD

    SELECT '@AGE_INTEGER = ' , @AGE_INTEGER

    set @BirthDate = '08/25/1980'

    set @YEARS = DATEPART(YEAR, @BIRTHDATE)

    SET @MONTHS = DATEPART(MM, @BIRTHDATE)

    SET @DAYS = DATEPART (DD, @BIRTHDATE)

    SET @BIRTH_YYYYMMDD = (@YEARS * 10000) + (@MONTHS * 100) + @DAYS

    SET @AGE_INTEGER = (@CURRENT_YYYYMMDD - @BIRTH_YYYYMMDD) / 10000

    SELECT 'BIRTH DATE = ' , @BIRTH_YYYYMMDD

    SELECT '@AGE_INTEGER = ' , @AGE_INTEGER

    set @BirthDate = '08/24/1980'

    set @YEARS = DATEPART(YEAR, @BIRTHDATE)

    SET @MONTHS = DATEPART(MM, @BIRTHDATE)

    SET @DAYS = DATEPART (DD, @BIRTHDATE)

    SET @BIRTH_YYYYMMDD = (@YEARS * 10000) + (@MONTHS * 100) + @DAYS

    SET @AGE_INTEGER = (@CURRENT_YYYYMMDD - @BIRTH_YYYYMMDD) / 10000

    SELECT 'BIRTH DATE = ' , @BIRTH_YYYYMMDD

    SELECT '@AGE_INTEGER = ' , @AGE_INTEGER