2014-12-23 4 views
0

Я пытаюсь создать таблицу календаря, которая содержит индивидные даты. Для каждой даты присутствует столбец, в котором указывается, на какой неделе, isowk, месяц, квартал и т. Д. Принадлежит.получить первую и последнюю дату 4-недельного периода

Это не большая проблема. Но теперь мы работаем с 4-недельными периодами, основанными на isowk. Так

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

Что происходит с годами с 53 неделями ISO, например. 2015-12-28 по 2016-01-03 - неделя 53 2015 года, станет ли это свой период, период 14-го 2015 года, или он перейдет в 2016 году? – GarethD

+0

Это будет период 14, но с меткой «Период 1» – Henrov

ответ

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) 

Я не уверен, почему вы используете wk вместо isowk если вы хотите недели ISO.

+0

Теперь я вижу, что вы правы: на 2012-01-01 f.e. все не получается :(Предложения? – Henrov

Смежные вопросы