Compter le mois différent de SQL SERVER à ce jour

J'ai un problème en comptant la différence du mois de 2 date avec SQL Server requête

J'ai essayé d'utiliser DATEDIFF(MONTH, SD, ED)

ceci par exemple

 SD = '2013-12-10 00:00:00.000' ED = '2014-12-09 00:00:00.000' SELECT DATEDIFF(MONTH, SD, ED) --result : 12 //this correct result SD = '2013-12-10 00:00:00.000' ED = '2014-12-10 00:00:00.000' SELECT DATEDIFF(MONTH, SD, ED) --result : 12 //this incorrect result, the result that i want is 13 SD = '2013-12-10 00:00:00.000' ED = '2014-12-15 00:00:00.000' SELECT DATEDIFF(MONTH, SD, ED) --result : 12 //this incorrect result, the result that i want is 13 SD = '2013-12-01 00:00:00.000' ED = '2014-11-30 00:00:00.000' SELECT DATEDIFF(MONTH, SD, ED) --result : 11//this incorrect result, the result that i want is 12 

est-il une solution pour get le résultat correct de la différence de mois de 2 date ?? Est-ce que quelqu'un peut m'aider?

Merci

DATEDIFF compare uniquement les mois sans tenir count des dates à l'intérieur. Comme vous voulez inclure des parties de mois, essayez de comparer les dates aussi, et d'append CASE WHEN DATEPART(day,@d2) >= DATEPART(day,@d1) THEN 1 ELSE 0 END

Donc, pour utiliser la notation de votre question:

 SELECT DATEDIFF(MONTH, SD, ED) + CASE WHEN DATEPART(DAY, ED) >= DATEPART(DAY, SD) THEN 1 ELSE 0 END 

DATEDIFF() fonctionne différemment de ce que beaucoup de gens attendent. De la documentation officielle :

Renvoie le nombre (entier signé) des limites de datepart spécifiées croisées entre la date de début spécifiée et enddate .

DATEDIFF(MONTH, @startdate, @enddate) est équivalent à

 (YEAR(@enddate) - YEAR(@startdate)) * 12 + (MONTH(@enddate) - MONTH(@startdate)). 

Donc pour 2013-12-01 et 2014-11-30 , son (2014-2013) * 12 + (11 - 12)

ce qui est en effet 11. Pour '2013-12-31' et '2014-11-01' c'est également 11. Encore une fois, c'est fait de cette façon parce que c'est la seule façon culturellement neutre et entièrement cohérente de le faire.

Vous aurez besoin de définir ce que "correct" est en termes de votre application et ensuite écrire votre requête en tant que telle. Si vous devez utiliser la logique plusieurs fois, une fonction définie par l'user est recommandée.