如何创建一个将在两个日期之间返回numberOfPeriods的函数

时间:2011-05-11 21:54:59

标签: sql sql-server sql-server-2005

有人可以帮助处理带有四个参数(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个星期五。

2 个答案:

答案 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