2015-11-05 3 views
1

Я пытаюсь преобразовать дату начала + окончания в несколько строк, заполненных с помощью weeknumbers и года, подключенного к нему. Моя идея состоит в том, чтобы преобразовать эту начальную + дату окончания в SSIS с помощью компонента Script и создать строки для каждой недели, установив SynchronousInput в «None». Я пробовал использовать Timespan для этого, однако это не учитывается до следующего года, когда он достигнет следующей недели 53.Преобразование периодаStart и PeriodEnd в год + номер недели

Кто-нибудь знает, как это сделать?

Пример:

Входной сигнал:

StartDate EndDate 
2014-12-29 2015-02-01 

Требуются выход:

Year WeekNr 
    2015  1 
    2015  2 
    2015  3 
    2015  4 
    2015  5 
+0

Есть 21 дней между 5 и 26. Как вы получаете 5 недель? Это полные недели, начинающиеся в понедельник или в StartDate? –

+0

исправил его, но дело в том, чтобы взять номер недели (26 января на неделе 5) – Alim

+0

2015-01-05 никогда не будет 1-й, а не в формате ISO, а не в формате США. Возможно, вам следует точно описать, как конвертировать в ваш желаемый результат –

ответ

1

Во-первых, я использовал формульной от here, но потом вспомнил, что есть лучший способ, используя sqlserver 2008+ и изменил сценарий, чтобы быть более читаемым:

;WITH N(N)AS 
(SELECT 1 FROM(VALUES(1),(1),(1),(1),(1),(1),(1),(1),(1),(1))M(N)), 
tally(N)AS(SELECT ROW_NUMBER()OVER(ORDER BY N.N)FROM N,N a,N b,N c,N d,N e,N f) 
SELECT 
    datepart(iso_week, dateadd(week, n-1, @from)) weeknr, 
    datepart(year, dateadd(week, datediff(day, -7*n, @from)/7, -4)) Year 
FROM TALLY 
WHERE 
    datediff(ww, dateadd(d, -1, @from), dateadd(d, -1, @to))+1 >= n 

Результат:

weeknr Year 
1  2015 
2  2015 
3  2015 
4  2015 
5  2015 
+0

Это сделало трюк для меня thx! – Alim

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