我正在尝试创建一个包含单独日期的日历表。 对于每个日期,都会出现一列,告诉您该日期属于哪个星期,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周期间的第一个日期?
感谢您与我一起思考
答案 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
的原因。