我正在编写Microsoft SQL Server报表生成器中的报表,我正在尝试编写一个表达式,该表达式仅显示从今天起的下一个工作日(即一个表有5列,它从今天开始并继续接下来的五个工作日)。如果当天是星期六或星期日,使用我的enumeration value将使用Weekday
功能返回6或7,您将跳到下一个工作日。目前,我在今天的日期
IIf(Weekday(DateAdd("d",1,Today()),2)=6,DateAdd("d",3,Today()),
(IIf(Weekday(DateAdd("d",1,Today()),2)=7,DateAdd("d",2,Today()),
DateAdd("d",1,Today()))))
并且它不起作用。我相信这是因为如果我们有一个像星期三,星期四或星期五这样的一天,那么周末的日子就不会被跳过。
答案 0 :(得分:2)
如果我们可以假设您将从一个工作日开始,那么我们可以使用一个简单的公式:
=IIF(6 - WeekDay(Today()) - X < 0, DateAdd("d", X + 2, Today()), DateAdd("d", X, Today()))
其中X
是列从开始日期开始的天数。
不幸的是,如果开始日期是星期六或星期日,它就会崩溃,但如果你只在工作日需要它,那么你很高兴。
答案 1 :(得分:1)
我认为您必须使用以前的列值而不是使用Today() 所以在第一列中它将是当前日期。 (如果可以从周末开始,则应用相同的公式)。 在这种情况下,我认为开关盒更容易。
当日列的公式
=switch (
Weekday(today) = 6, dateadd("d", 2, today),
Weekday(today) = 7, dateadd("d", 1, today),
Weekday(today) < 6, today
)
在第二列而不是今天()使用“Fields!previous_column_name.Value”。
=switch (
Weekday(dateadd("d", 1, Fields!previous_column_name.Value)) = 6, dateadd("d", 3, Fields!previous_column_name.Value),
Weekday(dateadd("d", 1, Fields!previous_column_name.Value)) = 7, dateadd("d", 2, Fields!previous_column_name.Value),
Weekday(dateadd("d", 1, Fields!previous_column_name.Value)) < 6, dateadd("d", 1, Fields!previous_column_name.Value)
)
在第三列中,将第二列用作previous_column。
希望这会对你有所帮助。