2011-12-06 54 views
5

Devo calcolare il numero di completo tra anni tra due date in sql. La query che sto usando attualmente per il calcolo èCalcolare il numero di anni tra le date in 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 

Tuttavia ho bisogno di modificarlo in qualche modo che si considera il tempo tra 1/5/2011 e 30/4/2012 esempio 1 anno completo.

+0

Capitan Ovvio in soccorso: se 'ANNO (Data1) = anno (Data2)', quindi 0 anni completi andato da - nessuna necessità di sottrarre. (A meno che non sia il 1 ° gennaio al 31 dicembre, in tal caso non è necessario sottrarre neanche.) – ANeves

risposta

4

Aggiungere un giorno Date2 prima lo si confronta:

dateadd(day, 1, Date2) 
+0

a volte il modo più semplice è il modo più semplice: P –

+0

@Andomar, grazie per quello. A volte il mio cervello diventa AWOL :) –

1

Se l'obiettivo è quello di considerare 1-anno-meno-un-giorno per essere un anno intero, per quanto riguarda la semplice aggiunta di 1 giorno per la vostra data successiva? dateadd() dovrebbe farlo.

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

io non credo che causerebbe altri calcoli errati ...

Problemi correlati