mercoledì 14 ottobre 2015

Calcolo numero mesi tra due date sql

Il seguente codice ritorna il numero di mesi tra due date sql.

DECLARE @dd1 date = '2015-01-01'
DECLARE @dd2 date = '2015-03-31'
SELECT DATEDIFF (month, @dd1, DATEADD(hour, 24, CAST(CAST(@dd2 AS DATE) AS DATETIME))) -
CASE
WHEN DATEPART(day, @dd1) > DATEPART(day, DATEADD(hour, 24, CAST(CAST(@dd2 AS DATE) AS DATETIME))) THEN 1 ELSE 0
END

Un mese viene ignorato se manca anche un solo giorno per completarlo, ad esempio facendo partire la data dal 2 gennaio perdiamo un mese
DECLARE @dd1 date = '2015-01-02'
DECLARE @dd2 date = '2015-03-31'

Questo mese può essere recuperato spostando la data finale di un giorno:
DECLARE @dd1 date = '2015-01-02'
DECLARE @dd2 date = '2015-04-01'