我正在建立一份SSRS报告。

在报告中,本周总是从周一至周日开始。
我想找出前两周的开始和结束日期。

例如,

如果当前日期= 2011年1月1日
- 当前周= 2010年12月27日至2011年1月2日
- 上周= 2010年12月20日至2010年12月26日

我已经尝试了以下内容,但是当当天=星期日时,似乎失败了

DECLARE @DT DATETIME
DECLARE @Offset INT
DECLARE @CM DATETIME
DECLARE @PM DATETIME
DECLARE @PS DATETIME

--SET @DT = GETDATE()
SET @DT = '11/14/2010' -- Monday
SET @Offset = (DATEPART(WEEKDAY, @DT) - 2) * -1
SET @CM = DATEADD(DAY, @Offset, @DT)
SET @PM = DATEADD(DAY, -7, @CM)
SET @PS = DATEADD(DAY, -1, @CM)

SELECT @Offset AS Offset, @DT AS Date, @CM AS Monday, @PM AS [Previous Monday], @PS AS [Previous Sunday], DATEPART(WK, @PM) AS Week

我该如何解决?

有帮助吗?

解决方案

不确定这是否是最优雅的解决方案,但是您可以对这样的@offset进行案例语句:

SET @offset = CASE WHEN DATEPART(weekday, @today) >= 2
                  THEN -(DATEPART(weekday, @today) - 2)
                  ELSE -(DATEPART(weekday, @today) + 5)
               END

我相信它适用于所有情况。

其他提示

添加一个 [Calendar] 与您需要预先计算的所有日期一起向您的DB表。然后,您可以包括带有日名,号码,假日等的字段,只需查找所需的值即可。

这比玩更简单 DATEADD

日历表上的一篇有用的文章: 我为什么要考虑使用辅助日历表?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top