我正在尝试返回一些基于一系列周的数据。这将是一份SSRS报告。
例如,我需要返回从7月3日到7月9日(周日-周六)的所有行,将其命名为Week of the month。然后是7月10日到7月16日,也就是第二周,以此类推。最困难的部分是让它在两个月之间继续。例如,6月26日到7月2日。
我确信我可以使用DATEPART以某种方式做到这一点,但我真的不知道如何做。有人能提供帮助吗?
提前谢谢你。
发布于 2011-07-20 07:14:45
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')))))您可能想要检查右括号的计数,但基本上这是这样说的:
额外的日期计算将达到7/1/2011 (月+1),然后返回一天到6/30/2011。另一种方法是对每个月的日期间隔进行硬编码。通过这种方式,您还可以参数化日期并连接,如下所示
CAST(@Month + '/1/' + @Year as smalldatetime)
发布于 2011-07-20 07:20:01
我建议使用类似于日期维度的东西。你如何做到这一点的例子有很多。这里有一个: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这应该会给你一个很好的近似值,你可能想要检查我的父母。
https://stackoverflow.com/questions/6755194
复制相似问题