【问题标题】:T-SQL to get datesT-SQL 获取日期
【发布时间】:2015-05-19 02:48:47
【问题描述】:

我有 SSRS 销售报告,我需要将上个月的开始日期和结束日期的日期传递给我可以使用以下代码传递的日期。但是,由于销售报告有过去一年(2014 年)的数据,我还需要传递去年的日期。下面的代码将 StartDate1 指定为 2015-02-01,将 EndDate1 指定为 2015-02-28。我需要获取过去一年的日期,例如 2014-02-01 作为 StartDate2 和 2014-02-28 作为 EndDate2

SELECT  DATEADD(MONTH, DATEDIFF(MONTH, '19000201', GETDATE()), '19000101') AS StartDate1,
    DATEADD(MONTH, DATEDIFF(MONTH, '19000101', GETDATE()), '18991231') AS EndDate1

【问题讨论】:

  • 您使用的是哪个版本的 SQL Server?如果您有 2012+,您可以使用 EOMonth 获取所选月份的最后日期。 msdn.microsoft.com/en-us/library/hh213020.aspx
  • @mmarie- 我使用的是 SQL Server 2008 R2
  • 可能有一种更简单的方法,但您可以取下个月的第一个日期并减去一天以获得您想要的月份的最后一天
  • 或者你可以做小于..而不是小于等于。

标签: sql sql-server tsql reporting-services


【解决方案1】:

由于月份的最后一天可能会有所不同,因此重要的是获取今年当月的第一天。从中可以计算出其他三个值。

您可以使用参数默认值中的表达式轻松地做到这一点。

Start of Month
=Today.AddDays(1-Today.Day)

End of Month
=Today.AddDays(1-Today.Day).AddMonths(1).AddDays(-1)

Start of Month Last Year
=Today.AddDays(1-Today.Day).AddYears(-1)

End of Month Last Year:
=Today.AddDays(1-Today.Day).AddYears(-1).AddMonths(1).AddDays(-1)

但如果你真的想用 SQL 来做,你可以。请注意,下面我将描述如何获取月份的开始,然后在其他表达式中使用占位符变量来清楚说明。

--Start of Month
dateadd(month, datediff(month, 0, getdate()), 0)

--End of Month
dateadd(day, -1, dateadd(month, 1, @StartOfMonth))

--Start of Month Last Year
dateadd(year, -1, @StartOfMonth)

--End of Month Last Year
dateadd(day, -1, dateadd(month, 1, @StartOfMonthLastYear))

这些是碎片。将它们组合成一个巨大的、很难阅读的 select 语句,如下所示:

select
    dateadd(month, datediff(month, 0, getdate()), 0) StartDate1,
    dateadd(day, -1, dateadd(month, 1, dateadd(month, datediff(month, 0, getdate()), 0))) EndDate1,
    dateadd(year, -1, dateadd(month, datediff(month, 0, getdate()), 0)) StartDate2,
    dateadd(day, -1, dateadd(month, 1, dateadd(year, -1, dateadd(month, datediff(month, 0, getdate()), 0)))) EndDate2

现在您明白为什么我建议只使用可以利用 .NET 日期时间类方法的内部参数了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-12
    • 2010-10-11
    • 2011-01-20
    • 2021-03-19
    • 2017-07-11
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多