Ver Mensaje Individual
  #9 (permalink)  
Antiguo 01/08/2007, 12:34
Avatar de iislas
iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 10 meses
Puntos: 180
Re: Sigo con problemas con las fechas uy uy uy!

Listo, perdon por la burrada, se debe pasar la FECHA DE NACIMIENTO como DATETIME y como el GETDATE(), no esta permitido en una funcion, se pasa como parametro.

-- Se crea la funcion
ALTER FUNCTION fn_CalculaEdad (@fecha datetime, @hoy as datetime)
RETURNS VARCHAR(50)
AS
BEGIN
declare @años as integer
declare @meses as integer
declare @dias as integer
--declare @fecha as datetime
-- declare @hoy as datetime


--set @fecha = '19600407'
-- set @hoy = getdate()
set @años = datediff(yy, @fecha, @hoy)
if dateadd(yy, @años, @fecha) > @hoy
set @años = @años - 1
set @fecha = dateadd(yy, @años, @fecha)
set @meses = datediff(mm, @fecha, @hoy)
if dateadd(mm, @meses, @fecha) > @hoy
set @meses = @meses - 1
set @fecha = dateadd(mm, @meses, @fecha)
set @dias = datediff(dd, @fecha, @hoy)
set @fecha = dateadd(dd, @dias, @fecha)
--print 'Tu edad es de ' + ltrim(str(@años)) + ' años ' + ltrim(str(@meses)) + ' meses y ' + ltrim(str(@dias)) + ' días.'
RETURN(ltrim(str(@años)) + ' años ' + ltrim(str(@meses)) + ' meses y ' + ltrim(str(@dias)) + ' días.')
END

-- Para hacer referencia a ella
CREATE TABLE #ALUMNOS (Nombre VARCHAR(50), Fecha_Nacimiento VARCHAR(10))
INSERT INTO #ALUMNOS VALUES('ISAIAS ISLAS', '19600407')
INSERT INTO #ALUMNOS VALUES('ADRIANA MENDEZ', '19720205')
INSERT INTO #ALUMNOS VALUES('BRITNEY SPEARS', '19821004')


SELECT Nombre, dbo.fn_CalculaEdad(Fecha_Nacimiento, GETDATE()) FROM #ALUMNOS

Resultados (Correctos):

Nombre
-------------------------------------------------- --------------------------------------------------
ISAIAS ISLAS 47 años 3 meses y 25 días.
ADRIANA MENDEZ 35 años 5 meses y 27 días.
BRITNEY SPEARS 24 años 9 meses y 28 días.