Periodos entre fechas

07/02/2005 - 11:43 por Joan Q. | Informe spam
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

#1 Joan Q.
07/02/2005 - 13:23 | Informe spam
Pues los días no me salen

"Joan Q." escribió en el mensaje
news:
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


Preguntas similares