Saludos.
Estoy haciendo una función que reciba la Cédula de Identidad del Estudiante
y la Fecha Actual para que me devuelva la edad.
La situación es que debido a razones que escapan de mi administración, el
formato de la FechaDeNacimiento está como varchar(10) y no siendo esto lo
peor, el valor de esta cadena puede estar completamente malo con cosas como:
1/50/1918, 01/0/1918, 0/20/1948, etc.
La intención es que cuando la función se encuentre con una fecha de estas,
devuelva un valor como -1.
Este es el código de la función como va:
alter function CalcularEdad (@Cedula bigint, @FechaActual datetime)
returns int
as
begin
declare @Edad int
set @Edad = (select datepart(YYYY,@FechaActual) -
datepart(YYYY,convert(datetime,substring(fecha_nacimiento,5,4) +
substring(fecha_nacimiento,3,2) +
substring(fecha_nacimiento,1,2),101))
EdadEstudiante
from estudiante
where cedula = @Cedula)
return(@Edad)
end
go
Esta función funciona bien cuando el formato de @FechaActual viene correcto,
¿De qué manera podría yo detectar que el formato viene equivocado y devolver
en @Edad = -1 ?
Muchas gracias de antemano.
Joe
P.D.: Esto es la manera como uso la función cuando el formato de la fecha
viene correcto
select primer_apellido,
segundo_apellido,
primer_nombre,
segundo_nombre,
estuneplus.dbo.CalcularEdad(cedula, getdate())
EdadEstudiante
from estudiante
where cedula = '12910333'
Y el resultado devuelto es:
DIAZ UNDA JOSE GREGORIO
29
y eso cuando el formato de la fecha viene equivocado:
select primer_apellido,
segundo_apellido,
primer_nombre,
segundo_nombre,
estuneplus.dbo.CalcularEdad(cedula, getdate())
EdadEstudiante
from estudiante
where cedula = '14021955'
Y el resultado devuelto es:
"Servidor: mensaje 242, nivel 16, estado 3, procedimiento
CalcularEdad, línea 7
La conversión del tipo de datos char a datetime produjo un valor
datetime fuera de intervalo."
Leer las respuestas