[英]SSRS expression - get date of most recent saturday
我正在嘗試找到一個SSRS表達式,該表達式將返回最近的星期六的日期。 如果表達式在星期六運行,我希望它顯示前一周的星期六。
我玩弄了一個在網上找到的示例,然后用它來產生所需的價值。 下面列出:
=IIf(Parameters!O_endDate.Value = nothing, DateAdd("d", -7-(WeekDay(Today(),7))+8, Today()), Parameters!O_endDate.Value)
我為這個愚蠢的帖子表示歉意。 我不明白為什么上面的表達式會產生我所需要的值,並且我想知道當它在將來的一周中的其他日子運行時,是否會繼續按我希望的方式工作。 注意:我在星期日運行此代碼。
為了您的目的,我認為您不需要IIF語句-如果不是空值,這只會返回參數的值。
這DateAdd("d", -7-(WeekDay(Today(),7))+8, Today())
鍵操作DateAdd("d", -7-(WeekDay(Today(),7))+8, Today())
為DateAdd("d", -7-(WeekDay(Today(),7))+8, Today())
。
這是在-7-(WeekDay(Today(),7))+8
加上-7-(WeekDay(Today(),7))+8
天-由於-7 + 8 = 1 1-(WeekDay(Today(),7))
因此可以簡化為1-(WeekDay(Today(),7))
。
查看此處的文檔,return_type似乎無效,因為該函數僅針對值1、2和3進行了定義-如果該函數現在可以正常工作,則可能無法繼續工作。
如果您希望最近的星期日是今天,而今天是星期日,則可以一直使用DateAdd("d", WeekDay(Today(), 2)), Today())
DateAdd("d", 1 - WeekDay(Today(), 1), Today())
,或者使用DateAdd("d", WeekDay(Today(), 2)), Today())
如果最近的星期日是上周,而今天是星期日。
請注意,在這兩種情況下,由於兩次調用Today()的時間相差幾毫秒,所以這可能會在午夜左右產生錯誤的答案。 絕對正確的是:
Declare @DateToCheck datetime=Today()
Select DateAdd('d', 1 - WeekDay(@DateToCheck, 1), @DateToCheck)
這是一種更通用的方法,應該更接近於ANSI SQL。
請參閱SQL Server 2008的SQL小提琴 。
由於DATEPART的返回值取決於全局數據庫設置,因此將返回值調整為一個已知的星期六。 將其更改為一周的另一天,您將獲得當天的最后一天。
您可以嘗試以下操作: =DateAdd("d", -1 * (weekday(today()) mod 7 ), today())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.