Попробуйте использовать DATEDIFF()
и DATEPART()
.
Вы можете проверить, находятся ли даты начала и окончания за пределами даты января, а затем добавить-1 ...
DECLARE @startdate AS DATETIME = '2015-02-01'
DECLARE @enddate AS DATETIME = '2019-06-01'
SELECT
DATEDIFF(yy, @startdate, @enddate)
+ 1
+ CASE
WHEN DATEPART(m, @startdate) > 1 AND
DATEPART(m, @enddate) > 1
THEN -1
ELSE 0
END
Однако я не уверен, насколько быстро это будет для больших наборов данных. Если вы собираетесь сравнивать множество данных с определенным набором даты / времени, я бы порекомендовал проверить ответ Белки .
Чтобы изменить это для другого месяца, просто измените CASE
предложение вроде так ...
+ CASE
WHEN DATEPART(m, @startdate) < 2 AND DATEPART(m, @startdate) > 2 AND
DATEPART(m, @enddate) < 2 AND DATEPART(m, @enddate) > 2
2
в операторе CASE
- это месяц, поэтому просто измените его на соответствующий номер месяца.
Если вы хотитехотел бы изменить это для любого месяца, а затем включить параметр для номера месяца, который вы ищете ...
+ CASE
WHEN DATEPART(m, @startdate) < @month_number AND
DATEPART(m, @startdate) > @month_number AND
DATEPART(m, @enddate) < @month_number AND
DATEPART(m, @enddate) > @month_number
Это также можно превратить в функцию (UDF) .