【问题标题】:SSRS expression - get date of most recent saturdaySSRS 表达式 - 获取最近星期六的日期
【发布时间】:2013-01-06 21:57:38
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: sql sql-server reporting-services


    【解决方案1】:

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

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

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

    查看文档here,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) 
    

    【讨论】:

    • 嗨@Dale M - 你的解决方案DateAdd("d", WeekDay(Today(), 2)), Today()) 没有返回最近的星期六(2012 年 1 月 5 日) - 相反,它返回了明天的日期(2012 年 1 月 8 日)
    • 如果我想显示从周日到周六运行一周的数据怎么办?
    【解决方案2】:

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

    请参阅SQL Fiddle 了解 SQL Server 2008。

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

    【讨论】:

    • 感谢 Dale,我稍后会仔细研究一下。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多