Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

fechas complicadisimas AYUDA!!!!!!

Estas en el tema de fechas complicadisimas AYUDA!!!!!! en el foro de SQL Server en Foros del Web. Hola Amigos Del Foro, Antes Que Nada Queria Agradecerles Porque Seguramente Alguien Me Podra Ayudar, Y Que Necesito De Su Ayuda... Tengo Un Problema En ...
  #1 (permalink)  
Antiguo 23/11/2005, 14:28
Avatar de lanzi  
Fecha de Ingreso: noviembre-2005
Ubicación: BUENOS AIRES
Mensajes: 55
Antigüedad: 18 años, 5 meses
Puntos: 0
fechas complicadisimas AYUDA!!!!!!

Hola Amigos Del Foro, Antes Que Nada Queria Agradecerles Porque Seguramente Alguien Me Podra Ayudar, Y Que Necesito De Su Ayuda... Tengo Un Problema En Sql Con El Manejo Entre Fechas Que No Puedo Solucionar Y Me Gustaria Saber Si Me Pueden Ayudar, O Si Conocen Alguien Que Pueda Hacerlo:
Tengo Un Campo Fecha Por Ej: 08/11/1976 Y Otro Campo Que Podria Ser El 28/06/2004. El Problema Es El Siguiente, Tengo Que Poner En Otro Campo La Cantidad De Años, Meses Y Dias Que Hay Entre Ambas Fechas, Por Ejemplo "20 Años, 10 Meses Y 3 Dias", (incluir "años, Meses Y Dias" No Es Lo Dificil, El Problema Real Es Que Haciendo Un Datediff, Tira Este Inconveniente: Por Ejemplo:
Entre El 23/12/2003 Y El 11/02/2005 En Años, Me Muestra Dos Años De Diferencia Cuando En Realidad No Pasaron Dos Años Entre Una Y Otra Y Ni Hablar De Los Meses Y Dias Y Que Existen Tambien Los Años Bisiestos),
Si Pueden Contactarse Conmigo, O Ayudarme De Alguna Manera Me Salvarian El Trabajo Realmente, Desde Ya Agradezco Y Mando Un Abrazo De Todo Corazon.
  #2 (permalink)  
Antiguo 23/11/2005, 18:55
 
Fecha de Ingreso: noviembre-2005
Mensajes: 658
Antigüedad: 18 años, 5 meses
Puntos: 3
Lo que pasa es que la funcion datediff realiza una resta directa de los años, por ello no siempre funciona calcular la diferencia de años usando solo esta funcion.
Lo correcto a usar es esto

select
case when fecha1 < convert(char(4),datepart(yyyy,fecha1))+ convert(char(2),datepart(month,fecha)) + convert(char(2),datepart(dd,fecha))
then datediff(yy,fecha,fecha1) - 1
else datediff(yy,fecha,fecha1)
end anno
from TUTABLA
......


Se ve complicado pero funciona bien para calcular los años..... los bisiestos no lo probé...

Bueno pero algo es algo

Suerte
  #3 (permalink)  
Antiguo 23/11/2005, 19:56
 
Fecha de Ingreso: septiembre-2005
Mensajes: 43
Antigüedad: 18 años, 7 meses
Puntos: 0
Checate esta manera
esto lo puedes poner en un solo query
o hacer una función
----------------------------


declare
@FecInic datetime,
@FecFin datetime,
@FecTrab datetime,
@Ayo Int,
@Mes Int,
@Dia Int

Select @FecInic = '10/27/2003'
Select @FecFin = '11/28/2004'

select @Ayo = Floor(datediff(mm,@FecInic,@FecFin)/12.0)
select 'Años',@Ayo
Select @FecTrab = dateadd(mm,Floor(datediff(mm,@FecInic,@FecFin)/12.0)*12,@FecInic)
select @Mes = datediff(mm,@FecTrab,@FecFin)
Select 'Meses',@Mes
Select @FecTrab = dateadd(mm,@Mes,@FecTrab)
Select @Dia = datediff(dd,@FecTrab,@FecFin)
select 'Dias',@Dia

-------------------------------------

Atte
-----------------------
Gabriel Sanchez
México
[email protected]
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:37.