如何使用SQL Reporting Services获取当月的最后一天

Cor*_*ory 15 datetime reporting-services ssrs-2008

在SQL Server Reporting Services中,如何计算当月的最后一天?

Cor*_*ory 40

这是我想出的答案

=DateSerial(Year(Now()), Month(Now()), "1").AddMonths(1).AddDays(-1)
Run Code Online (Sandbox Code Playgroud)

  • 就像买枪一样,有一段等待时间才能接受你自己的答案.我会在2天内将其标记为已被接受. (3认同)

Tec*_*ane 21

我花了一段时间来解决这个问题,而JC的答案是最简单的修改并具有良好的逻辑结构.我为其他人搜索关于这个主题的答案略微扩展了它.我发现通常你不只是想要一个月/一年的最后一天你也想要一个月/一年的第一天.所以在这里他们是完整的线来计算.还有SQl版本.

本月第一天

SSRS=Today.AddDays(1-Today.Day)
SQL=SELECT DATEADD(s,0,DATEADD(mm, DATEDIFF(m,0,getdate()),0))
Run Code Online (Sandbox Code Playgroud)

本月最后一天

SSRS=Today.AddDays(1-Today.Day).AddMonths(1).AddDays(-1)
SQL=SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))
Run Code Online (Sandbox Code Playgroud)

今年的第一天

SSRS=Today.AddMonths(1-Today.month).AddDays(1-Today.day)
SQL=SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
Run Code Online (Sandbox Code Playgroud)

当年的最后一天

SSRS=Today.AddDays(1-Today.Day).AddMonths(13-today.month).AddDays(-1)
SQL=SELECT DATEADD(dd,-1,DATEADD(yy,0,DATEADD(yy,DATEDIFF(yy,0,getdate())+1,0)))
Run Code Online (Sandbox Code Playgroud)

我希望这有助于somone.


JC *_*ord 10

我知道你找到了自己的答案,但我建议你这样做:

=Today.AddDays(1-Today.Day).AddMonths(1).AddDays(-1)
Run Code Online (Sandbox Code Playgroud)

在我看来,它更容易阅读,并且可能会有稍微好一点的表现(尽管很可能不会引起注意)

当然,如果您想将该日期填充到23:59:59(通常是必要的),只需稍微修改:

=Today.AddDays(1-Today.Day).AddMonths(1).AddSeconds(-1)
Run Code Online (Sandbox Code Playgroud)