Hola a todos,
Hace un tiempo hice una consulta que fue amablemente contestada en su
momento por Javier Loria (gracias Javier) sobre diferencia entre 2 fechas
expresada en año, meses y días. La solución dada por Javier era
DECLARE @FechaInicial SMALLDATETIME
DECLARE @FechaFinal SMALLDATETIME
SET @FechaInicial = '20010101'
SET @FechaFinal = '20040227'
SELECT @FechaInicial AS FechaInicial
, @FechaFinal AS FechaFinal
, DATEDIFF(year, @FechaInicial , @FechaFinal) AS AnosDiferencia
, DATEDIFF(month,DATEADD(year,
DATEDIFF(year, @FechaInicial , @FechaFinal), @FechaInicial),
@FechaFinal)
AS MesesDiferencia
, DATEDIFF(day,DATEADD(month,
DATEDIFF(month, @FechaInicial , @FechaFinal), @FechaInicial),
@FechaFinal)
AS DiasDiferencia
Si el mes de @fechainicial es anterior al de @fechafinal funciona, al revés
ya no.
Lo que me sorprende es que la funcion datediff(year, @fechainicial,
@fechafinal) sencillamente coge la parte del año de @fechainicial y la
compara con la parte del año de @fechafinal: esto no es determinar la
diferencia en años entre 2 fechas.
Bueno, había pensado
convert(int, (datediff(day, @fechainicial, @fechafinal))/364.5 )as
AnosDiferencia,
convert(int, (datediff(month, @fechainicial, @fechafinal) - (convert(int,
(datediff(day, @fechainicial, @fechafinal))/364.5 )* 12)))as
MesesDiferencia,
day(@fechafinal) - day(@fechainicial) as DiasDiferencia
Queda un poco patatero, pero creo ahora funciona
Joan Q
Leer las respuestas