The third solution is clearly incorrect - given a datetime value of 01/26/1978.
i.e.
declare @DateOfBirth datetime
set @DateOfBirth = '1978-01-26 00:00:00.000'
select @DateOfBirth
select DATEDIFF(yy, @DateOfBirth, GETDATE())
select FLOOR(CONVERT(decimal(9, 2), DATEDIFF(d, @DateOfBirth, GETDATE())) / 365.0)
select DATEDIFF(yy, @DateOfBirth, GETDATE()) - CASE WHEN DATEPART(m, @DateOfBirth) >= DATEPART(m, GETDATE()) AND DATEPART(d, @DateOfBirth) >= DATEPART(d, GETDATE()) THEN 0 ELSE 1 END
Returns:
30 - Correct
30 - Correct
29 - Incorrect
Tommy
Follow @sqlscribe