在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
我怎样才能解决这个问题不成?
答
不知道这是最优雅的解决方案,但你可以做一个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
有点不相关:SQL Server 2008 R2现在有一个`DATE`类型,所以你不需要为时间分配空间。 – Matthew 2011-01-10 23:18:29