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

时间:2010-05-17 21:17:25

标签: datetime reporting-services ssrs-2008

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

7 个答案:

答案 0 :(得分:39)

以下是我提出的答案

=DateSerial(Year(Now()), Month(Now()), "1").AddMonths(1).AddDays(-1)

答案 1 :(得分:21)

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

本月第一天

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

本月最后一天

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

今年的第一天

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

本年度的最后一天

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)))

我希望这有助于somone。

答案 2 :(得分:9)

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

=Today.AddDays(1-Today.Day).AddMonths(1).AddDays(-1)

在我看来,它更容易阅读,并且可能会有更好的表现(虽然很可能不会引起注意)

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

=Today.AddDays(1-Today.Day).AddMonths(1).AddSeconds(-1)

答案 3 :(得分:0)

来自Microsoft SQL团队成员的博客:

-- returns the last day of the current month.
select dbo.Date(year(getdate()), month(getdate())+1,0)

http://weblogs.sqlteam.com/jeffs/archive/2007/01/02/56079.aspx

希望这有帮助! --Dubs

答案 4 :(得分:0)

您可以尝试使用此表达式,请立即将其替换为日期字段。

= DateSerial(年(现在),月(现在),1)

希望这会有所帮助。

致谢

答案 5 :(得分:0)

有一个更简单的方法,如标记的答案:

=DateSerial(Year(Now()), Month(Now())+1, 0)

因为DateSerial()接受整数作为参数,所以不必使用AddMonths()和AddDays()。如示例中所示,可以在DateSerial()中进行即时计算。

此外,第1天是该月的第一天,而第一天减去一天是前一个月的最后一天(1-1 = 0)。因此,该示例将返回当月最后一天的日期。

答案 6 :(得分:-1)

您可以通过添加它作为参考来使用程序集来完成这项工作。