У меня этот блок SQL работает в большинстве ситуаций, но я возвращаю отрицательное значение "день", когда месяц / день даты окончания> больше месяца / дня даты начала. Не совсем уверен, как предотвратить отрицательные результаты дня, кроме как обернуть это в случае, когда нужно ловить исключения, когда конец месяца / дня> начальный месяц / день.
Например, если начальная дата 2017–06–05, а конечная дата 2019–06–04, вывод будет «24 месяца и -1 дни».
CONVERT ( VARCHAR ( MAX ),
DATEDIFF ( month , [Participant - Birthday] , [Event - Event Date] ) )
+ ' months and ' +
CONVERT ( VARCHAR ( MAX ) ,
DATEDIFF ( day , DATEADD ( month , DATEDIFF ( month , [Participant - Birthday] , [Event - Event Date] ) , [Participant - Birthday] ) , [Event - Event Date] ) )
+ ' days'
Ожидаемый выход с использованием вышеуказанной даты начала и окончания должен составлять «23 месяца и 30 дней».