代码之家  ›  专栏  ›  技术社区  ›  Cory

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

  •  15
  • Cory  · 技术社区  · 14 年前

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

    5 回复  |  直到 11 年前
        1
  •  39
  •   Cory    14 年前

    这是我想出来的答案

    =DateSerial(Year(Now()), Month(Now()), "1").AddMonths(1).AddDays(-1)
    
        2
  •  21
  •   Technane    12 年前

    我花了一段时间才弄明白,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)))
    

    我希望这对索蒙有帮助。

        3
  •  9
  •   JC Ford    14 年前

    我知道你找到了自己的答案,但我建议你选择:

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

    在我看来,它读起来容易一点,而且性能可能稍好一点(尽管很可能不明显)。

    当然,如果你想把日期填到23:59:59,这通常是必要的,只需稍微修改一下:

    =Today.AddDays(1-Today.Day).AddMonths(1).AddSeconds(-1)
    
        4
  •  0
  •   Dubs    14 年前

    从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

    希望这有帮助! ——配音

        5
  •  -1
  •   masoud ramezani    14 年前

    通过将程序集添加为引用,可以使用它来执行此工作。