我正在尝试根据一系列周数返回一些数据。这将是SSRS报告。
例如,我需要返回所有日期为7月3日至7月9日(周日至周六)的行,并将其命名为该月的第1周。然后是7月10日到7月16日,也就是第2周,等等。最困难的部分是让它持续数月。例如,6月26日至7月2日。
我确信我可以使用DATEPART以某种方式执行此操作,但实际上并不知道如何操作。有人可以提供协助吗?
提前谢谢。
答案 0 :(得分:1)
DATEPART(week, DateField)
将为您提供一年中的一周,这将涵盖您的标准。每个星期都不是一个很好的使用标准,因为它是如此无定形。
您可以通过返回DATEPART(week, '7/1/2011')
或其他任何内容来获取本月第一周的一周,这将为您提供一个起点。
修改强>
根据评论中的其他条件:
SELECT <fields>
FROM MyTable
WHERE YEAR(DateField) = 2011
AND DATEPART(week, Datefield) BETWEEN
DATEPART(week, '6/1/2011') AND DATEPART(week, (DATEADD(DAY, -1, (DATEADD(Month, 1, '6/1/2011')))))
您可能需要检查结束括号计数,但基本上这样说:
额外日期计算是到2011年7月1日(月+1)然后返回到2011年6月30日。另一种方法是硬编码每个月的日期中断。这样你也可以参数化日期并连接如
CAST(@Month + '/1/' + @Year as smalldatetime)
答案 1 :(得分:0)
我建议使用类似于日期维度的东西。有很多关于你如何做到这一点的例子。这是一个: http://prologika.com/CS/forums/p/517/2094.aspx
好吧,我会给出一个更准确的答案,因为还没有人留下任何东西
Declare @myDate datetime = getdate()
select DATEPART(week, @myDate) - DATEPART(week,CONVERT(DATETIME, DATENAME(mm, @myDate)+"/01/"+ DATENAME(yyyy, @myDate) ))-1
这应该给你一个很好的近似值,你可能想检查我的parens。