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
😎