2011-12-06 44 views
5

Necesito calcular el número de completo años entre dos fechas en sql. La consulta que estoy utilizando actualmente para calcular esCalcular Número de años entre las fechas en Sql

--Date1 > Date2 
CASE 
WHEN YEAR(Date1) = YEAR(Date2) 
    THEN DATEDIFF(year, Date2, Date1) 
WHEN YEAR(Date1) > YEAR(Date2) 
     AND MONTH(Date1) >= MONTH(Date2) 
     AND DAY(Date1) >= DAY(Date2) 
    THEN DATEDIFF(year, Date2, Date1) 
ELSE 
    DATEDIFF(year, Date2, Date1) - 1 

Sin embargo tengo que modificar de alguna manera por lo que considera que el tiempo entre 1/5/2011 y el 30/4/2012 como de 1 año completo.

+0

Capitán Obvio al rescate: si 'AÑO (Fecha1) = AÑO (Fecha2)', luego fueron 0 años completos por - no hay necesidad de restar. (A menos que sea del 1 de enero al 31 de diciembre, en cuyo caso no es necesario restar ninguno.) – ANeves

Respuesta

4

Añadir un día para Date2 antes se compara:

dateadd(day, 1, Date2) 
+0

a veces la manera más simple es la manera más fácil: P –

+0

@Andomar, gracias por eso. Mi cerebro desaparece a veces :) –

1

Si el objetivo es tener en cuenta de 1 año menos un día a ser un año completo, ¿qué pasa con la simple adición de 1 día a su ¿fecha posterior? dateadd() debería hacerlo.

mysql> SELECT ADDDATE('2011-05-01', INTERVAL 1 DAY); 
     -> '2011-05-02' 

No creo que haría que otros cálculos erróneos ...

Cuestiones relacionadas