在SQL Server中播放日期时间

问题描述:

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

不知道这是最优雅的解决方案,但你可以做一个case语句与@Offset这样的:

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

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

添加[Calendar]表到您的数据库与所有日期,你需要预先计算。然后,您可以包含日期名称,号码,假日等字段,只需查找您需要的值即可。

这比用DATEADD

打在日历表的一个有用的文章简单得多:Why should I consider using an auxiliary calendar table?

+0

对于日期表来说+1 ...使得许多事情变得更容易和更快速。 – 2011-01-10 23:21:50