2014-02-11 84 views
7

我已经看到了这个问题问了很多,我似乎无法找到有关SSRS 2008年则DateDiff为工作日

一个明确的答案“怎么只有两个日期之间计算工作日?”

下面的表达式会给我总的日子,但我期待排除周六和周日。

=DateDiff("d",Parameters!STARTDATE.Value,Parameters!ENDDATE.Value) 

我将不胜感激关于如何实现这一点的具体帮助。

预先感谢您。

+0

的可能重复[工作日计算(http://stackoverflow.com/questions/7444846/business-days-calculation) –

+0

如果我使用的查询在其他职位,我在哪里将该查询放置在SSRS中?以及如何在文本框中引用它? – Lance

+0

最好的办法是创建一个函数,我应该这样想。但如何计算工作日,这是一个不同的问题。必须承认我认为DateDiff是标准的SQL函数? –

回答

3

为SSRS翻译的链接中的SQL(Number of working days between two dates):希望这会给你一个开始的好地方。将其输入到文本框的表达式中。

=(DateDiff(DateInterval.day,Parameters!STARTDATE.Value,Parameters!ENDDATE.Value)+1) 
-(DateDiff(DateInterval.WeekOfYear,Parameters!STARTDATE.Value,Parameters!ENDDATE.Value)*2) 
-(iif(Weekday(Parameters!STARTDATE.Value) = 7,1,0) 
-(iif(Weekday(Parameters!ENDDATE.Value) = 6,1,0))-1) 
+0

你是一个天才......谢谢你 – Lance

5

此代码不完全正确。一年可以在星期六或星期天开始或结束。例如,2011年在星期六开始,在星期六结束。 1月1日& 2011年2月分别是周六和周日,2011年12月31日也是周六。上面的代码没有考虑到这种情况。下面的代码是正确的:

= (DateDiff(DateInterval.day,Parameters!BeginDate.Value,Parameters!EndDate.Value)+1) 
- (DateDiff(DateInterval.WeekOfYear,Parameters!BeginDate.Value,Parameters!EndDate.Value)*2) 
- IIF(Weekday(Parameters!BeginDate.Value,1) = 1,1,0) 
- IIF(Weekday(Parameters!BeginDate.Value,1) = 7,1,0) 
- IIF(Weekday(Parameters!EndDate.Value,1) = 1,1,0) 
- IIF(Weekday(Parameters!EndDate.Value,1) = 7,1,0)