周末逻辑给出了53周

时间:2014-02-07 15:21:18

标签: sql sql-server sql-server-2008 week-number

我正在尝试为所有周创建周末 我的逻辑是

dateadd(day, 7-datepart(Weekday, basicstart), basicstart)

正在生成周结为“4-Jan-2014”上周2013表示29-Dec-2013表示31-Dec-2013 但它没有在同一周内将1-Jan-2014的数据合并到4-Jan-2014而是生成另一个具有相同名称的周(4-Jan-2014

这意味着我的数据将在1月4日和1月4日的2个单独的周内完成

任何人都可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

那一周的一部分是在2013年,那一周的一部分是在2014年。

一年中的第一周和最后一周受以下特点影响。

a)一年总有53周

b)一周可以有1到7天。 7是最常见的

合并数周

您可以执行类似

的操作
CASE WHEN myweek = 53 THEN 1 ELSE myweek END AS myweek

合并1和53无济于事,因为那时你的情况是

a)每年总有52周

b)一周可以有7到9天

c)大部分时间都可能在一年内,但你将其置于相反的一年

答案 1 :(得分:1)

52 * 7 = 364. 365天的年数总是超过53周。 366天的年份通常为53周,有时为54周。 365天或366天的日历年将始终与相邻的日历年共享至少一周。

此问题的SQL式解决方案是制作和维护一个日历表,您可以在其中存储所有业务日历规则。