有人可以帮助处理带有四个参数(StartDate,EndDate,DayOftheWeek和Frequency)的SQL函数,并返回numberofPeriods在这些日期范围之间。
例如,如果您将startdate传递为05/12/2011,enddate为06/12/2011,DayOftheweek = Friday,Frequency = Weekly)则应计算05/12之间的星期五。 2011年和2011年6月12日每周一次。在此示例中,这些日期范围之间有5个星期五。
答案 0 :(得分:1)
我和你在一起直到
中间有多少个星期五 2011年5月12日和2011年12月6日每周一次 基础
我将假设“每周”这句话只是噪音。 (这实际上是胡说八道,不是吗?每周星期五的数量与每日或每月星期五的数量之间有什么区别?)
最简单的解决方案是使用日历表。我认为这也是最容易理解的。
select count(*)
from calendar
where (cal_date between '2011-05-12' and '2011-06-12')
and (day_of_week = 'Fri');
我使用的那个的{p> I've posted a simplified version。它是为PostgreSQL编写的,但它很容易适应。注意约束。
答案 1 :(得分:1)
这将使您想要没有新的特殊表格。这是一个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