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:固定周结束日期和月结束日期快照日期的主要内容,如果未能解决你的问题,请参考以下文章
无法使用除 SSMS 之外的任何东西连接到 SQL Server 2016 SP1
SQL-创建表在 SQL Server Management Studio SSMS 中不起作用
SharePoint Server 2016 部署安装—— 安装SQL Server 2016(下)