如何返回数周的数据(Sun到Sun)

时间:2011-07-19 23:09:45

标签: sql sql-server-2008

我正在尝试根据一系列周数返回一些数据。这将是SSRS报告。

例如,我需要返回所有日期为7月3日至7月9日(周日至周六)的行,并将其命名为该月的第1周。然后是7月10日到7月16日,也就是第2周,等等。最困难的部分是让它持续数月。例如,6月26日至7月2日。

我确信我可以使用DATEPART以某种方式执行此操作,但实际上并不知道如何操作。有人可以提供协助吗?

提前谢谢。

2 个答案:

答案 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年
  • 2011年6月1日至6/30/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。