• Start with this and do a lot of testing. You may need to tweak it as I did not do a lot of testing so its accuracy may vary.

    declare @dob datetime,

    @age int,

    @day datetime

    set @day = '2008-12-15'

    set @dob = '2007-02-28'

    set @age = datediff(yy,@dob,@day) -

    case when @day < dateadd(yy, datediff(yy,@dob,@day), @dob) then 1 else 0 end

    select

    case

    when @day < dateadd(mm, 1, @dob)

    then cast(datediff(dd, @dob, @day) as varchar) + 'd'

    when @day < dateadd(mm, 3, @dob)

    then cast(datediff(wk, @dob, @day) as varchar) + 'w'

    when @day <= dateadd(yy, 1, @dob)

    then cast(datediff(mm, @dob, @day) as varchar) + 'm'

    else cast(datediff(yy,@dob,@day) -

    case when @day < dateadd(yy, datediff(yy,@dob,@day), @dob) then 1 else 0 end as varchar) + 'y'

    end

    😎