0

我试图找到一个 SSRS 表达式,它将返回最近星期六的日期。如果表达式在星期六运行,我希望它显示前一周的星期六。

我玩弄了一个我在网上找到的例子,并让它产生我需要它产生的价值。下面列出:

=IIf(Parameters!O_endDate.Value = nothing, DateAdd("d", -7-(WeekDay(Today(),7))+8, Today()), Parameters!O_endDate.Value)

我为愚蠢的帖子道歉。我不明白为什么上面的表达式会产生我需要的值,我想知道它是否会继续像我希望的那样工作,当它在未来一周的其他日子运行时。注意:我在周日运行了这段代码。

4

3 回答 3

2

出于您的目的,我认为您不需要 IIF 语句 - 如果它不是什么都没有,它只会返回参数的值。

这将关键操作保留为DateAdd("d", -7-(WeekDay(Today(),7))+8, Today())

它的作用是增加-7-(WeekDay(Today(),7))+8今天的天数 - 这可以简化为1-(WeekDay(Today(),7))-7+8=1。

查看此处的文档,return_type 似乎无效,因为该函数仅针对 1、2 和 3 的值定义 - 如果它现在工作,那么它可能无法继续工作。

如果DateAdd("d", 1 - WeekDay(Today(), 1), Today())您希望最近的星期日是今天,而今天是星期日,或者DateAdd("d", WeekDay(Today(), 2)), Today())如果最近的星期日是上周,而今天是星期天,这将一直有效。

请注意,在这两种情况下,由于对 Today() 的 2 次调用相隔几毫秒,这可能会在午夜左右产生错误的答案。要绝对正确,它应该是:

Declare @DateToCheck datetime=Today()
Select DateAdd('d', 1 - WeekDay(@DateToCheck, 1), @DateToCheck) 
于 2013-01-07T04:00:52.203 回答
1

这是一种更通用的方法,应该更接近 ANSI SQL。

请参阅 SQL Server 2008 的SQL Fiddle

因为 DATEPART 的返回值取决于全局数据库设置,所以返回值会针对已知的星期六进行调整。通过将其更改为一周中的另一天,您将获得最后一天。

于 2013-01-09T03:12:17.517 回答
0

你可以试试这个: =DateAdd("d", -1 * (weekday(today()) mod 7 ), today())

于 2017-06-30T05:07:53.783 回答