USE [LABORATORY] GO /****** Object: UserDefinedFunction [dbo].[fn_LabComputeAge] Script Date: 11/21/2017 10:13:48 ******/ SET ANSI_NULLS OFF GO SET QUOTED_IDENTIFIER OFF GO ALTER FUNCTION [dbo].[fn_LabComputeAge] (@BirthDate as datetime, @DateToday as datetime) RETURNS varchar(3) AS BEGIN declare @Age as varchar(3) declare @d1 as int declare @d2 as int declare @m1 as int declare @m2 as int declare @y1 as int declare @y2 as int declare @dAge as int declare @mAge as int declare @yAge as int if @birthdate <= '01/01/1900' or @birthdate > getdate() set @age = '' else begin set @y1 = year(@BirthDate) set @m1 = month(@BirthDate) set @d1 = day(@BirthDate) set @y2 = year(getdate()) set @m2 = month(getdate()) set @d2 = day(getdate()) if @d2 < @d1 begin set @d2 = @d2 + 30 set @m2 = @m2 - 1 end set @dAge = datediff(day, @BirthDate, getdate()) if @m2 < @m1 begin set @m2 = @m2 + 12 set @y2 = @y2 - 1 end set @mAge = @m2 - @m1 set @yAge = @y2 - @y1 if @yAge = 0 if @mAge = 0 Begin If @dAge = 0 Set @Age = cast(@dAge as varchar(3)) else set @Age = cast(@dAge as varchar(3)) + 'D' End else set @Age = cast(@mAge as varchar(3)) + 'M' else set @Age = cast(@yAge as varchar(3)) end Return @Age END