Hola,
Odio decir esto pero la lógica está mal (después de corregir solamente el problema de la declaración de la variable @aDia). El resultado que obtengo en MSSQL 2000 :
para la fecha 20 de Noviembre de 1972 ('19721101')
al día de hoy 28 de Enero de 2009: 36 años 337 días.
Cuando en realidad debería ser : 36 Años 69 Dias
para la fecha 27 de Enero de 2009 ('20090127')
al día de hoy : 0 años 28 días
En realidad debería ser : 0 Años 1 Dias
Con 30 de Enero de 1992 genera un error.
Creo que podría ser mas simple, es un script :
(Para sp ó function hay que parametrizarlo, etc.)
Código:
declare @fecha datetime
declare @final datetime
declare @annos integer
declare @dias integer
declare @temp datetime
-- set @fecha = '20090128'
-- set @final = '20090128'
set @fecha = '19721120'
set @final = getdate()
set @annos = datediff(Year, @fecha, @final)
set @temp = dateadd(Year, @annos, @fecha)
set @dias = datediff(Day, @temp, @final)
if sign(@dias) < 0
begin
set @annos = @annos - 1
set @temp = dateadd(Year, @annos, @fecha)
set @dias = datediff(Day, @temp, @final)
end
print CONVERT(NVARCHAR, @annos) + N' Años ' + CONVERT(NVARCHAR, @dias) + N' Dias'
Saludos,