Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Разбить год на периоды (по неделям)  [new]
MrBlackJack
Member

Откуда:
Сообщений: 43
Всем привет! Сразу перейду к примеру, нужно разбить год на периоды:
Например, год 2011
Год Неделя ДатаНачала ДатаКонец
2011 1 2011-01-03 2011-01-09
2011 2 2011-01-10 2011-01-16
2011 3 2011-01-17 2011-01-23
2011 4 2011-01-24 2011-01-30

, а также необходимо все это фильтровать в зависимости от заданного периода
Если мы скажем задали период с 2011-01-01 по 2011-01-25, должны исходить из следующего правил:
- Всегда начинаем новый год с понедельника, то есть не берем неделю 2011-01-01 и 02
- Если начало периода приходится на понедельник - четверг, то берем первую неделю полностью
- Если начало приходится на пятницу - воскресенье недели, то отбрасываем эту неделю вообще
- То же с окончанием если оно попадает на понедельник - четверг - отбрасываем эту неделю, если на пятницу - воскресенье, то берем всю неделю полностью

Известен номер недели и год. На форуме нашел, как по этим данным найти период
CREATE FUNCTION [dbo].[PeriodPoNomNedel]
(
	@W   int, 
	@God varchar(4)
)
RETURNS TABLE 
AS
RETURN 
(
 SELECT DATEADD(DAY, DATEDIFF(DAY,0,@God)/7*7+@W*7,0)   as   DateBegin, 
        DATEADD(DAY, DATEDIFF(DAY,0,@God)/7*7+@W*7+6,0) as   DateEnd 
)
, но с условиями что-то не получается, не получается собрать это все вместе...
Заранее спасибо!
Версия сервера:
Microsoft SQL Server 2008 (SP2) - 10.0.4000.0 (X64)
29 ноя 11, 17:02    [11679138]     Ответить | Цитировать Сообщить модератору
 Re: Разбить год на периоды (по неделям)  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
MrBlackJack,

ищите по словам [https://www.sql.ru/forum/actualsearch.aspx?search=%ED%EE%EC%E5%F0+%ED%E5%E4%E5%EB%E8+ISO&sin=0&bid=1&a=&ma=0&dt=-1&s=1&so=1]"номер недели ISO"[/url]

Например: https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=628394&msg=6656440
Начиная с SQL2008 надо так:
DATEPART(ISO_WEEK, @Date)
29 ноя 11, 17:12    [11679210]     Ответить | Цитировать Сообщить модератору
 Re: Разбить год на периоды (по неделям)  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Плохо отформатировалось.

ищите по словам номер недели ISO

Например: https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=628394&msg=6656440
Начиная с SQL2008 надо так:
DATEPART(ISO_WEEK, @Date)
29 ноя 11, 17:16    [11679236]     Ответить | Цитировать Сообщить модератору
 Re: Разбить год на периоды (по неделям)  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
MrBlackJack,

так?
declare @tbl table (dt datetime)
declare @dt_start datetime = '2011-01-01'
declare @dt_end datetime = '2012-01-01'

while @dt_start < @dt_end begin
 insert into @tbl(dt) values (@dt_start)
 set @dt_start = DATEADD(d,1,@dt_start)
end

select ROW_NUMBER() over (partition by datepart(dw,dt) order by dt),
dt
from @tbl
order by dt
29 ноя 11, 17:18    [11679253]     Ответить | Цитировать Сообщить модератору
 Re: Разбить год на периоды (по неделям)  [new]
MrBlackJack
Member

Откуда:
Сообщений: 43
iap, большое спасибо за ссылки, очень помогли понять и разобраться! Все отлично получилось)
1 дек 11, 11:56    [11688323]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить