填写 IsoWeek 的月份
Fill the month for IsoWeek
首先,对于冗长的专栏,我深表歉意,我不得不 post 全部介绍,这样您才能更好地理解我正在努力解决的问题。
我有一个带有 TheDate 和 ISOWeek 的日历。
我想要做的是创建另一列来表示该日期的月份。编号将从 1 开始,并有一个完整的 IsoWeek 和一个完整的月份。
例如,1 月将在 2 月 2 日结束,因为 1 月的最后一个完整周从 2 月开始“位”。
我尝试了很多解决方案,比如将 ISOWeek 转换为 ISOMonth,但 none 给出了预期的结果。
感谢任何帮助。
编辑:
感谢下面的 Alex,解决方案是:
SELECT month(dateadd(d, 3, dateadd(WEEK, datediff(WEEK, 0, DATEADD(d,-1,'20200302')), 0)))
TheDate IsoWeek The Month---I want to add this
12/30/2019 1 1
12/31/2019 1 1
1/1/2020 1 1
1/2/2020 1 1
1/3/2020 1 1
1/4/2020 1 1
1/5/2020 1 1
1/6/2020 2 1
1/7/2020 2 1
1/8/2020 2 1
1/9/2020 2 1
1/10/2020 2 1
1/11/2020 2 1
1/12/2020 2 1
1/13/2020 3 1
1/14/2020 3 1
1/15/2020 3 1
1/16/2020 3 1
1/17/2020 3 1
1/18/2020 3 1
1/19/2020 3 1
1/20/2020 4 1
1/21/2020 4 1
1/22/2020 4 1
1/23/2020 4 1
1/24/2020 4 1
1/25/2020 4 1
1/26/2020 4 1
1/27/2020 5 1
1/28/2020 5 1
1/29/2020 5 1
1/30/2020 5 1
1/31/2020 5 1
2/1/2020 5 1
2/2/2020 5 1
2/3/2020 6 2
2/4/2020 6 2
2/5/2020 6 2
2/6/2020 6 2
2/7/2020 6 2
2/8/2020 6 2
2/9/2020 6 2
2/10/2020 7 2
2/11/2020 7 2
2/12/2020 7 2
2/13/2020 7 2
2/14/2020 7 2
2/15/2020 7 2
2/16/2020 7 2
2/17/2020 8 2
2/18/2020 8 2
2/19/2020 8 2
2/20/2020 8 2
2/21/2020 8 2
2/22/2020 8 2
2/23/2020 8 2
2/24/2020 9 2
2/25/2020 9 2
2/26/2020 9 2
2/27/2020 9 2
2/28/2020 9 2
2/29/2020 9 2
3/1/2020 9 2
3/2/2020 10 3
3/3/2020 10 3
3/4/2020 10 3
3/5/2020 10 3
3/6/2020 10 3
3/7/2020 10 3
3/8/2020 10 3
3/9/2020 11 3
3/10/2020 11 3
3/11/2020 11 3
3/12/2020 11 3
3/13/2020 11 3
3/14/2020 11 3
3/15/2020 11 3
3/16/2020 12 3
3/17/2020 12 3
3/18/2020 12 3
3/19/2020 12 3
3/20/2020 12 3
3/21/2020 12 3
3/22/2020 12 3
3/23/2020 13 3
3/24/2020 13 3
3/25/2020 13 3
3/26/2020 13 3
3/27/2020 13 3
3/28/2020 13 3
3/29/2020 13 3
3/30/2020 14 3
3/31/2020 14 3
4/1/2020 14 3
4/2/2020 14 3
4/3/2020 14 3
4/4/2020 14 3
4/5/2020 14 3
ISO 周从星期一开始,因此给定周的 month/year 始终等于该周星期四的 month/year。
您可以通过周截断日期列来获得此信息,然后添加 3 天,如下所示:
ALTER TABLE calendar ADD TheMonth int;
UPDATE calendar SET TheMonth = month(dateadd(DAY, 3, dateadd(WEEK, datediff(WEEK, 0, TheDate), 0)))
编辑:我减少了一天的工作时间
SELECT month(dateadd(d, 3, dateadd(WEEK, datediff(WEEK, 0, dateadd(d,-1,TheDate)), 0)))
首先,对于冗长的专栏,我深表歉意,我不得不 post 全部介绍,这样您才能更好地理解我正在努力解决的问题。
我有一个带有 TheDate 和 ISOWeek 的日历。
我想要做的是创建另一列来表示该日期的月份。编号将从 1 开始,并有一个完整的 IsoWeek 和一个完整的月份。
例如,1 月将在 2 月 2 日结束,因为 1 月的最后一个完整周从 2 月开始“位”。 我尝试了很多解决方案,比如将 ISOWeek 转换为 ISOMonth,但 none 给出了预期的结果。
感谢任何帮助。
编辑: 感谢下面的 Alex,解决方案是:
SELECT month(dateadd(d, 3, dateadd(WEEK, datediff(WEEK, 0, DATEADD(d,-1,'20200302')), 0)))
TheDate IsoWeek The Month---I want to add this
12/30/2019 1 1
12/31/2019 1 1
1/1/2020 1 1
1/2/2020 1 1
1/3/2020 1 1
1/4/2020 1 1
1/5/2020 1 1
1/6/2020 2 1
1/7/2020 2 1
1/8/2020 2 1
1/9/2020 2 1
1/10/2020 2 1
1/11/2020 2 1
1/12/2020 2 1
1/13/2020 3 1
1/14/2020 3 1
1/15/2020 3 1
1/16/2020 3 1
1/17/2020 3 1
1/18/2020 3 1
1/19/2020 3 1
1/20/2020 4 1
1/21/2020 4 1
1/22/2020 4 1
1/23/2020 4 1
1/24/2020 4 1
1/25/2020 4 1
1/26/2020 4 1
1/27/2020 5 1
1/28/2020 5 1
1/29/2020 5 1
1/30/2020 5 1
1/31/2020 5 1
2/1/2020 5 1
2/2/2020 5 1
2/3/2020 6 2
2/4/2020 6 2
2/5/2020 6 2
2/6/2020 6 2
2/7/2020 6 2
2/8/2020 6 2
2/9/2020 6 2
2/10/2020 7 2
2/11/2020 7 2
2/12/2020 7 2
2/13/2020 7 2
2/14/2020 7 2
2/15/2020 7 2
2/16/2020 7 2
2/17/2020 8 2
2/18/2020 8 2
2/19/2020 8 2
2/20/2020 8 2
2/21/2020 8 2
2/22/2020 8 2
2/23/2020 8 2
2/24/2020 9 2
2/25/2020 9 2
2/26/2020 9 2
2/27/2020 9 2
2/28/2020 9 2
2/29/2020 9 2
3/1/2020 9 2
3/2/2020 10 3
3/3/2020 10 3
3/4/2020 10 3
3/5/2020 10 3
3/6/2020 10 3
3/7/2020 10 3
3/8/2020 10 3
3/9/2020 11 3
3/10/2020 11 3
3/11/2020 11 3
3/12/2020 11 3
3/13/2020 11 3
3/14/2020 11 3
3/15/2020 11 3
3/16/2020 12 3
3/17/2020 12 3
3/18/2020 12 3
3/19/2020 12 3
3/20/2020 12 3
3/21/2020 12 3
3/22/2020 12 3
3/23/2020 13 3
3/24/2020 13 3
3/25/2020 13 3
3/26/2020 13 3
3/27/2020 13 3
3/28/2020 13 3
3/29/2020 13 3
3/30/2020 14 3
3/31/2020 14 3
4/1/2020 14 3
4/2/2020 14 3
4/3/2020 14 3
4/4/2020 14 3
4/5/2020 14 3
ISO 周从星期一开始,因此给定周的 month/year 始终等于该周星期四的 month/year。 您可以通过周截断日期列来获得此信息,然后添加 3 天,如下所示:
ALTER TABLE calendar ADD TheMonth int;
UPDATE calendar SET TheMonth = month(dateadd(DAY, 3, dateadd(WEEK, datediff(WEEK, 0, TheDate), 0)))
编辑:我减少了一天的工作时间
SELECT month(dateadd(d, 3, dateadd(WEEK, datediff(WEEK, 0, dateadd(d,-1,TheDate)), 0)))