0

我正在構建一個SSRS報告。在SQL Server中播放日期時間

在報告中,本週總是從週一到週日。
我想了解前兩週的START和END日期。

例如,

如果當前日期= 2011年1月1日
- 當前星期= 2010年12月27日到2011年1月2日
- 前一週=二零一零年十二月二十零日到12月26日, 2010

我曾嘗試以下,但看起來它時,當電流天=週日

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 

我怎樣才能解決這個問題不成?

+0

有點不相關:SQL Server 2008 R2現在有一個`DATE`類型,所以你不需要爲時間分配空間。 – Matthew 2011-01-10 23:18:29

回答

1

不知道這是最優雅的解決方案,但你可以做一個case語句與@Offset這樣的:

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

我相信它適用於所有情況。

2

添加[Calendar]表到您的數據庫與所有日期,你需要預先計算。然後,您可以包含日期名稱,號碼,假日等字段,只需查找您需要的值即可。

這比用DATEADD

打在日曆表的一個有用的文章簡單得多:Why should I consider using an auxiliary calendar table?

+0

對於日期表來說+1 ...使得許多事情變得更容易和更快速。 – 2011-01-10 23:21:50