簡體   English   中英

SSRS表達式-獲取最近一個星期六的日期

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM