Calculate Age in SQL Server with Years, Months, and Days

  1. CREATE function dbo.Age  
  2. (@dob datetime)  
  3. returns varchar(50)  
  4. as  
  5. BEGIN  
  6.     DECLARE @date datetime, @tmpdate datetime, @years int, @months int, @days int  
  7.     DECLARE @Age varchar(50)  
  8.     set @Age=''  
  9.     SELECT @tmpdate = @dob  
  10.       
  11.     SELECT @years = DATEDIFF(yy, @tmpdate, GETDATE()) - CASE WHEN (MONTH(@dob) > MONTH(GETDATE())) OR (MONTH(@dob) = MONTH(GETDATE()) AND DAY(@dob) > DAY(GETDATE())) THEN 1 ELSE 0 END  
  12.     SELECT @tmpdate = DATEADD(yy, @years, @tmpdate)  
  13.     SELECT @months = DATEDIFF(m, @tmpdate, GETDATE()) - CASE WHEN DAY(@dob) > DAY(GETDATE()) THEN 1 ELSE 0 END  
  14.     SELECT @tmpdate = DATEADD(m, @months, @tmpdate)  
  15.     SELECT @days = DATEDIFF(d, @tmpdate, GETDATE())  
  16.       
  17.     set @Age=convert(varchar(50),@years)+' Years '+convert(varchar(50),@months)+' Months '+convert(varchar(50),@days)+' Days';  
  18.     return @Age  
  19. END   
Function Execution: 
  1. select dbo.Age('1992-08-22')  
Result:
 
22 Years 10 Months 21 Days