得到4周的第一个和最后一个日期

时间:2014-12-23 12:38:08

标签: sql-server tsql datetime

我正在尝试创建一个包含单独日期的日历表。 对于每个日期,都会出现一列,告诉您该日期属于哪个星期,isowk,月份,季度等。

这不是一个大问题。但现在我们正在以isowk为基础,为期4周。 所以

date 2014-12-30 belongs to period 1 which starts on 2014-12-30 and ends on 2014-01-26
date 2014-02-01 belongs to period 2 which starts on 2014-01-27 and ends on 2014-03-02
date 2014-08-05 belongs to period 8 which starts on 2014-07-14 and ends on 2014-08-11

很容易计算一个日期属于哪个时期:

period_number = ceiling(cast(datepart(isowk,@date) as float) /4 )

找到特定周的开始和结束并不困难:

start_week = cast(DATEADD(wk,DATEDIFF(wk,0,@date),0) as date)
end_week = cast(DATEADD(wk,DATEDIFF(wk,0,@date),6) as date)

但如何计算 4周期间的第一个日期?

感谢您与我一起思考

1 个答案:

答案 0 :(得分:1)

如果开始周/结束周逻辑有效,那么这可能有效:

start_week = cast(DATEADD(wk, 4 * (DATEDIFF(wk, 0, @date) / 4), 0) as date)
end_week = cast(DATEADD(wk, 4 * (DATEDIFF(wk, 0, @date) / 4), 27) as date)

如果您想要ISO周,我不确定您使用wk代替isowk的原因。