Поскольку месяцы разной длины, для простоты я собираюсь предположить, что в месяце 30 дней. С точностью до одной цифры это не будет иметь большого значения, но не пытайтесь вычислять новые даты на основе полученного значения, поскольку они не будут на 100% точными.
(я постараюсь найти способ лучше отформатировать это ...)
DECLARE @d1 DATETIME
DECLARE @d2 DATETIME
SET @d1 = '2008-04-23'
SET @d2 = '2008-12-31'
SELECT CONVERT(FLOAT, DATEDIFF(mm, @d1, @d2)) + ROUND(CONVERT(FLOAT, DATEDIFF(dd, DATEADD(mm, DATEDIFF(mm, @d1, @d2), @d1), @d2) % 30) / 30, 1)
Это дает:
8.3
Формула учитывает, что между '2008-04-13' и '2008-11-05', DATEDIFF(mm ...)
возвращает 7, но на самом деле это не семь месяцев, а меньше. В этом примере возвращается:
6.7