Ver Mensaje Individual
  #3 (permalink)  
Antiguo 27/01/2009, 10:43
Avatar de Andres95
Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Función para el cálculo de la edad

Gracias por el aporte pero,

1. Al ejecutar indica uso indebido de getdate en funcion de usuario.
2. Al cambiar a stored procedure, indica que faltan declarar varibales.
3. Al declarar las variables faltantes y tratar de ejecutar con 30 de Enero de 1990, indica este msg de error.

Server: Msg 242, Level 16, State 3, Procedure edad, Line 34
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.


Y bueno ya no continue depurando...

Saludos!



Cita:
Iniciado por erick_arcini Ver Mensaje
Estimados (que dijeron ando preguntando no?... jaja) no, aquí les dejo una función para calcular la edad con los días transcurridos, igual y si ya se encontraba una pues ya ni modo, aquí la dejo.


Código:
create function edad(@nacimiento as datetime)
returns varchar(25)
as 
begin
declare @aYear varchar(3)
declare @diasTranscurridos varchar(3)

set @aYear = year(getdate()) - year(@nacimiento)

if month(getdate()) < month(@nacimiento)
	begin
		set @aYear = @aYear - 1 
		set @diasTranscurridos = datediff(day,convert(varchar,year(getdate())) + '/01/01',getdate())+1
		set @diasTranscurridos = 365 - @diasTranscurridos
	end
else
	begin
		if month(getdate()) > month(@nacimiento)
			begin
				set @diasTranscurridos = datediff(day,convert(varchar,year(getdate())) + '/01/01',getdate())+1
			end
		else
			begin
				if month(getdate()) = month(@nacimiento)
					begin
						if day(getdate()) = day(@nacimiento)
							begin
								set @aDia = 0
							end
						else
							begin
								if day(getdate()) < day(@nacimiento)
									begin
										set @aYear = @aYear - 1 
										set @diasTranscurridos = datediff(day,convert(varchar,year(getdate()) - 1) + '/01/01',convert(varchar,year(getdate()) - 1) + '/31/12') - (datediff(day,convert(varchar,year(getdate())) + '/' + convert(varchar,month(getdate())) + '/01',getdate()) + 1)
									end
								else
									begin 
										if day(getdate()) > day(@nacimiento)
											begin 
												set @diasTranscurridos = datediff(day,convert(varchar,year(getdate())) + '/' + convert(varchar,month(getdate())) + '/01',getdate())+1
											end
									end
							end
					end
			end
	end
return @aYear + ' años ' + @diasTranscurridos + ' días'
end
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.