将 PeriodStart 和 PeriodEnd 转换为年 + 周数
Converting a PeriodStart and PeriodEnd to year + week number
我正在尝试将开始日期和结束日期转换为多行,其中包含周数和与之相关的年份。我的想法是使用脚本组件在 SSIS 中转换此开始 + 结束日期,并通过将 SynchronousInput 设置为 'None' 来为每周创建行。我尝试为此使用时间跨度,但是当达到第 53 周以上时,这不会计算到下一年。
有谁知道如何做到这一点?
示例:
输入:
StartDate EndDate
2014-12-29 2015-02-01
想要的输出:
Year WeekNr
2015 1
2015 2
2015 3
2015 4
2015 5
起初,我使用了 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
我正在尝试将开始日期和结束日期转换为多行,其中包含周数和与之相关的年份。我的想法是使用脚本组件在 SSIS 中转换此开始 + 结束日期,并通过将 SynchronousInput 设置为 'None' 来为每周创建行。我尝试为此使用时间跨度,但是当达到第 53 周以上时,这不会计算到下一年。
有谁知道如何做到这一点?
示例:
输入:
StartDate EndDate
2014-12-29 2015-02-01
想要的输出:
Year WeekNr
2015 1
2015 2
2015 3
2015 4
2015 5
起初,我使用了 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