Это даст вам DATEDIFF для календаря на 360 дня:
Exclusive диапазон дат:
if datepart(day, @date2) = datepart(day,dateadd(day, -1,(Cast(Cast(datepart(year, @date2) as varchar) + '-' + Cast(datepart(month, @date2) + 1 as varchar) + '-01' as date))))
begin
Select datediff(month, @date1, @date2) * 30 - (DATEPART(day, @date1) - 30)
end
else if datepart(day, @date1) = datepart(day,dateadd(day, -1,(Cast(Cast(datepart(year, @date1) as varchar) + '-' + Cast(datepart(month, @date1) + 1 as varchar) + '-01' as date))))
begin
Select datediff(month, @date1, @date2) * 30 - (30 - datepart(day, @date2))
end
else
begin
Select datediff(month, @date1, @date2) * 30 - (DATEPART(day, @date1) - datepart(day, @date2))
end
Inclusive диапазон дат:
if datepart(day, @date2) = datepart(day,dateadd(day, -1,(Cast(Cast(datepart(year, @date2) as varchar) + '-' + Cast(datepart(month, @date2) + 1 as varchar) + '-01' as date))))
begin
Select datediff(month, @date1, @date2) * 30 - (DATEPART(day, @date1) - 30) + 1
end
else if datepart(day, @date1) = datepart(day,dateadd(day, -1,(Cast(Cast(datepart(year, @date1) as varchar) + '-' + Cast(datepart(month, @date1) + 1 as varchar) + '-01' as date))))
begin
Select datediff(month, @date1, @date2) * 30 - (30 - datepart(day, @date2)) + 1
end
else
begin
Select datediff(month, @date1, @date2) * 30 - (DATEPART(day, @date1) - datepart(day, @date2)) + 1
end
Проверка If, чтобы узнать, является ли какой-либо из дат последним днем месяца. Если они тогда, то они рассматривают его как 30-е, поскольку каждый месяц должен быть 30 дней.
Он вычисляет количество месяцев, умножает на 30, а затем разницу в последующие дни.
Если вы запускаете этот год в год с датами, он даст 360, если вы используете свой пример, он дает 311, но это верно.
SQL Скрипки: http://sqlfiddle.com/#!6/9eecb/5791/0
Пожалуйста, читайте здесь: https://msdn.microsoft.com/en-us/library/ms189794.aspx –
Ваш вопрос не имеет смысла. Почему недостаточно встроенной функции 'lateiff()'? Если нет, укажите данные образца и желаемые результаты, желательно в формате таблицы, чтобы мы могли прочитать его. –
Что вы подразумеваете под 'all month = 30 days и 1 year = 360 days'? Если вы указываете свой собственный календарь, то, конечно, встроенные функции календаря не будут работать. – TTeeple