Вы должны понимать, что DATEDIFF не подсчитывает количество интервалов между двумя датами, а подсчитывает количество раз, когда указанный интервал изменяется между двумя датами. В качестве крайнего примера, если вы попросите DATEDIFF сказать вам количество лет между '1999-12-31 23:59:59'
и '2000-01-01 00:00:01'
, он скажет, что они находятся с разницей в год (с разницей в 1 год), даже если они находятся всего в двух секундах, потому что год изменился один раз. (1999-> 2000) между двумя датами
Таким образом, поскольку вам нужен некоторый дробный элемент «количества интервалов» между двумя датами, вам придется использовать более мелкий интервал, например дни (если вы хотите количество месяцев) или секунды (если вы хотите количество минут) между вашими датами, а затем разделите этот интервал (150 минут между двумя датами, деленное на 60,0, дает 2,5 часа, чтобы получить приближение (вы должны принять что время 00:00:00 - 02:30:59
почти на две полные минуты длиннее, чем 00:00:59 - 02:30:00
, но интервал минут по-прежнему изменялся одинаковое количество раз) от целого.
В данном конкретном случае это неприятно, потому что месяцы различаются по продолжительности , поэтому даже если у вас есть две даты, например 1-е число одного месяца и 15-е число другого, они не всегда с промежутком в 1,5 месяца, потому что 15-е число не всегда составляет половину месяца (15/28 против 15/31)
Если вы можете терпеть это, то используйте, например, дни в своем датировке и что-то вроде среднего количества дней в месяце
Если вы не можете этого терпеть, возможно, получите продолжительность месяца (DAY(EOMOTH(date))
), на которую попадает ваша «половина месяца», будь то дата начала или дата окончания, и вычислите, что день в этом месяце соответствует "половине месяца" (т.е. между 28/2 и 31/2)