0

我正在构建一个 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

我该如何解决?

4

2 回答 2

2

在您的数据库中添加一个[Calendar]表格,其中包含您需要预先计算的所有日期。然后,您可以包含包含日期名称、编号、假期等的字段,并简单地查找您需要的值。

比玩简单多了DATEADD

关于日历表的有用文章:为什么要考虑使用辅助日历表?

于 2011-01-10T22:55:32.660 回答
1

不确定这是否是最优雅的解决方案,但您可以使用 @offset 做一个 case 语句,如下所示:

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

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

于 2011-01-10T23:16:09.600 回答