SQL Server - CALCULAR LA EDAD DETALLADA

   
Vista:

CALCULAR LA EDAD DETALLADA

Publicado por Ana (1 intervención) el 01/05/2009 07:50:16
Necesito saber como puedo calcular la edad imprimiendo la diferencia en: año, mes, dias, horas, minutos y segundos en SQL SERVER

ademas validar todos los rut e insertar aquellos que sean incorrectos en la tabla.

es urgente porfavor !!!!!!!

gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias

RE:CALCULAR LA EDAD DETALLADA

Publicado por Isaias (3186 intervenciones) el 04/05/2009 03:06:28
Si utilizas la herramienta de busqueda, veras que ya hemos colocado algunos ejemplos por aqui.

-- Primera opcion
declare @dob datetime
declare @today datetime
set @dob = '19600407'

set @today = dateadd(day, datediff(day, 0, getdate()), 0)
select
datediff(month, @dob, @today) / 12 as [año(s)],
datediff(month, @dob, @today) % 12 as [mes(es)]

-- Otra opcion
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'

-- Con una funcion

--Función para devolver lo que falta o lo que pasa entre dos fechas dadas.-
CREATE FUNCTION EntreFechasAñoMesDia (@CadenaInicio as nvarchar(10), @CadenaFin as nvarchar(10))
RETURNS nvarchar (100)
AS
BEGIN

declare @AñoInicio int
declare @MesInicio int
declare @DiaInicio int
declare @AñoFin int
declare @MesFin int
declare @DiaFin int
declare @Años int
declare @Meses int
declare @Dias int
declare @FechaInicio datetime
declare @FechaFin datetime
declare @Texto nvarchar(100)
--Para comprobar las fechas
if isdate(@CadenaInicio)=0 return('La fecha de Inicio no es correcta')
if isdate(@CadenaFin)=0 return ('La fecha de Fin no es correcta')
if datediff(dd, @CadenaInicio, @CadenaFin) = 0 return('La fecha de Inicio es igual que la de Fin')
--Asigna las cadenas a las fechas, inviertiéndolas si es necesario y cambiando el mensaje de salida.-
if datediff(dd, @CadenaInicio, @CadenaFin) > 0
begin
set @FechaInicio = @CadenaInicio
set @FechaFin = @CadenaFin
set @Texto = 'Pasa'
end
else
begin
set @FechaInicio = @CadenaFin
set @FechaFin = @CadenaInicio
set @Texto = 'Falta'
end
--Asigna los valores individuales de día, mes y año, para hacer los cálculos.-
set @DiaInicio = day(@FechaInicio)
set @MesInicio = month(@FechaInicio)
set @AñoInicio = year(@FechaInicio)

set @DiaFin = day(@FechaFin)
set @MesFin = month(@FechaFin)
set @AñoFin = year(@FechaFin)

--Comprueba si el día es menor o igual al de fin.-
if @DiaFin - @DiaInicio >= 0
begin
set @Dias = @DiaFin - @DiaInicio
end
--Si no, calcula la suma en días, desde el día de Inicio a fin de mes, mas los días de Fin, y le resta uno al mes de Fin.-
else
begin
set @Dias = (day(dateadd(mm,1,cast(('01/' + str(@MesInicio) + '/' + str(@AñoInicio)) as datetime)) - 1 )- @DiaInicio) + @DiaFin
set @MesFin = @MesFin - 1
end
--Lo mismo con el mes.-
if @MesFin - @MesInicio >= 0
begin
set @Meses = @MesFin - @MesInicio

end
else

begin
set @Meses = (@MesFin - @MesInicio) + 12
set @AñoFin = @AñoFin - 1
end

set @Años = @AñoFin - @AñoInicio
--A partir de qaquí ya tenemos los vlores del año, mes y día, lo siguiente es para presentarlo correctamente.-
declare @CadDia as varchar(20)
declare @CadMes as varchar(20)
declare @CadAño as varchar(20)

if @Dias = 0 set @CadDia = ''
if @Dias = 1 set @CadDia = ltrim(str(@Dias)) + ' día '
if @Dias > 1 set @CadDia = ltrim(str(@Dias)) + ' días '

if @Meses = 0 set @CadMes = ''
if @Meses = 1 set @CadMes = ltrim(str(@Meses)) + ' mes'
if @Meses > 1 set @CadMes = ltrim(str(@Meses)) + ' meses'

if @Años = 0
begin
set @CadAño = ''
if @Meses > 1 set @Texto = @Texto + 'n'
if @Meses = 0 and @Dias >1 set @Texto = @Texto + 'n'
end
if @Años = 1 set @CadAño = ltrim(str(@Años)) + ' año'
if @Años > 1
begin
set @CadAño = ltrim(str(@Años)) + ' años'
set @Texto = @Texto + 'n'
end

if @Meses <> 0
begin
if @Dias <> 0
begin
set @CadMes = @CadMes + ' y '
if @Años <> 0 set @CadAño = @CadAño + ', '
end
else
if @Años <> 0 set @CadAño = @CadAño + ' y '
end
else
if @Años <> 0 and @Dias <> 0 set @CadMes = @CadMes + ' y '
--end

Set @Texto = @Texto + ' ' + @CadAño + @CadMes + @CadDia
RETURN @Texto
END
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:CALCULAR LA EDAD DETALLADA

Publicado por fabio (1 intervención) el 17/01/2012 12:21:35
Oye, me quito la gorra ante ti, la primera opción me ha servido de maravilla.
Genial aportación!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar