Как создать функцию, которая будет возвращать numberOfPeriods между двумя датами - PullRequest
0 голосов
/ 12 мая 2011

Может ли кто-нибудь помочь с функцией SQL, которая принимает четыре параметра (StartDate, EndDate и DayOftheWeek и Frequency) и возвращает число периодов между этими датами.

Например, если вы передаете начальную дату как 05/12/2011, конечную дату - как 12.06.2011, а DayOftheweek = пятница и частота = еженедельно), то она должна рассчитать, сколько пятниц будет между 05/12 / 2011 и 12.06.2011 на еженедельной основе. В этом примере между этими диапазонами дат 5 пятниц.

Ответы [ 2 ]

1 голос
/ 12 мая 2011

Это даст вам желание без новых специальных таблиц.Это решение SQL Server.Вы можете создать это в виде или хранимой процедуре для повторного использования

declare @beginDate date,@endDate date,@dayOfWeek int
set @beginDate = '05/12/2011'
set @endDate = '2011-06-12'
set @dayOfWeek = 6;

with datesBetween as (
select @beginDate as OriginalDate,0 as Periods
union all 
select  CAST(DATEADD(day,1,OriginalDate) as date), CASE When datepart(weekday,OriginalDate) = 6 then Periods+1 else Periods end
from datesBetween
where OriginalDate <> @endDate
)

select MAX(periods)
from datesBetween
1 голос
/ 12 мая 2011

Я был с вами до

сколько пятниц между 12.05.2011 и 12.06.2011 в неделю

ЯПредположим, что фраза «на еженедельной основе» - просто шум.(Это буквально бессмыслица, не так ли? В чем разница между количеством пятниц на еженедельной основе и количеством пятниц на ежедневной или ежемесячной основе?)

Самое простое решение - использовать календарьТаблица.Я думаю, что это также легче всего понять.

select count(*) 
from calendar
where (cal_date between '2011-05-12' and '2011-06-12')
  and (day_of_week = 'Fri');

Я опубликовал упрощенную версию той, которую я использую.Он написан для PostgreSQL, но его легко адаптировать.Обратите внимание на ограничения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...