SQL Server 2016 到 SSMS:固定周结束日期和月结束日期快照日期

Posted

技术标签:

【中文标题】SQL Server 2016 到 SSMS:固定周结束日期和月结束日期快照日期【英文标题】:SQL Server 2016 through SSMS: Fixed week end date and month end date Snapshot Date 【发布时间】:2021-05-10 12:49:40 【问题描述】:

我想知道是否有办法在提取每周报告时,无论是在周六还是周日完成,我的快照日期将始终显示周六的日期。这样我就不用去更改我的周末结束日期(星期六),以防我们需要在第二天(星期日)手动运行报告。

每月报告也是如此,我需要修正月末日期,以防报告在当月的最后一个日期或之后的第二天(下个月 1 日)正确运行。

谢谢大家。

【问题讨论】:

我通过 SSMS 在 SQL Server 2016 上 请为您的问题添加更多信息:如果报告在周三、周四或其他任何一天执行,您期望什么?您是否总是希望报告显示上一个星期六的值?月度报告也是如此:如果它在该月的第一天和最后一天之外的任何其他日期执行,您预计会执行吗? 【参考方案1】:

要获取上周六日期或上个月末 - 请参阅以下示例:

Select dt.inputDate
     , PreviousSaturday = dateadd(day, datediff(day, 5, dt.inputDate) / 7 * 7, 5)
     , PreviousMonthEnd = dateadd(month, datediff(month, -1, dt.inputDate) - 1, -1)
   From (Values (12), (11), (10), (9), (8), (7), (6), (5), (4), (3), (2), (1), (0)) As t(n)
  Cross Apply (Values (dateadd(day, -t.n, getdate()))) As dt(inputDate)

【讨论】:

嗨,我最终使用了一种稍微不同的方法。 - 对于周末结束日期,它与日期名称一起使用:CASE WHEN DATENAME(W, GETDATE())='Saturday' THEN CAST(GETDATE() AS DATE) ELSE CAST(DATEADD(dd, -(DATEPART(WEEKDAY, GETDATE())-0),DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0)) AS DATE) END AS 'Week_End_Date'。 - 对于月末日期:CASE WHEN DAY(GETDATE()) BETWEEN 1 AND 5 THEN CAST(dateadd(month, datediff(month, -1, getdate()) - 1, -1) AS DATE) ELSE CAST (GETDATE() AS DATE) END AS 'Month_End_Date' –【参考方案2】:

如果您使用美国地区和 SQL Server 2016:

SELECT DATEADD(DAY
              ,CASE DATEPART(Weekday, GETDATE()) 
                     --1 = Sun 2 = Mon 3 = Tues 4= Wed 5 = Thu 6 = Fri 7 = Sat
                     WHEN 1 THEN -1
                     WHEN 2 THEN -2
                     WHEN 3 THEN -3
                     WHEN 4 THEN -4
                     WHEN 5 THEN -5
                     WHEN 6 THEN -6
                     WHEN 7 THEN 0
               END
              ,CAST(GETDATE() as date)
       ) AS [Previous_Saturday]

      ,DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1
       ) AS [Previous_Month_End]

产生输出:

Previous_Saturday Previous_Month_End
----------------- ------------------
2021-05-08        2021-05-01

DATEFROMPARTS 在 SQL Server 2016 及更高版本中可用。不同地区的工作日值可能会有所不同。

【讨论】:

以上是关于SQL Server 2016 到 SSMS:固定周结束日期和月结束日期快照日期的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2016 需要单独安装SSMS

无法使用除 SSMS 之外的任何东西连接到 SQL Server 2016 SP1

SQL-创建表在 SQL Server Management Studio SSMS 中不起作用

SharePoint Server 2016 部署安装—— 安装SQL Server 2016(下)

在开发过程中保持 SQL Server 数据库项目和实际数据库(在 SSMS 中)同步

理解性能的奥秘——应用程序中慢,SSMS中快——SQL Server如何编译动态SQL