使用 datepart 计算 1 月 1 日的美国周数错误
Wrong US week number calculation for 1st jan using datepart
SQL 服务器 DATEPART 函数有两个选项来检索周数;
ISO_WEEK
和 WEEK
。我知道两者之间的区别,我想根据美国遵循的星期日开始标准获得周数;即 WEEK
。但它并没有像我预期的那样处理部分周。例如
SELECT DATEPART(WEEK,'2015-12-31') --53
SELECT DATEPART(WEEK,'2016-01-01') --1
SELECT DATEPART(WEEK,'2016-01-03') --2
为一个星期给出两个不同的周数,分为两年。我想在工作日实施如下 link 中的内容。
Week numbers according to US standard
基本上我想要这样的东西;
SELECT DATEPART(WEEK,'2015-12-31') --1
SELECT DATEPART(WEEK,'2016-01-01') --1
SELECT DATEPART(WEEK,'2016-01-03') --2
编辑:
基本上我不擅长将一个星期分成两个星期,我必须根据周数进行一些计算,而且一个星期被划分的事实是不可接受的。所以如果以上不可能。
第一周是否可以从 2016-01-03 开始。即在那种情况下我会是这样的:
SELECT DATEPART(WEEK,'2015-12-31') --53
SELECT DATEPART(WEEK,'2016-01-01') --53
SELECT DATEPART(WEEK,'2016-01-03') --1
如果您希望生成日期的周数,它将return年的周数(输入日期)
因此,我认为 sql 服务器将“2015-12-31”视为 2015 年的最后一周。
如果您想要美国编号,您可以通过使用周末的 WEEK 编号而不是日期本身来实现。
首先确保一周第一天的设置在您的系统上实际上是星期日。您可以通过 运行ning SELECT @@DATEFIRST
验证这一点;星期天应该 return 7。如果没有,运行 SET DATEFIRST 7;
首先。
SELECT
end_of_week=DATEADD(DAY, 7-(DATEPART(WEEKDAY, '20151231')), '20151231'),
week_day=DATEPART(WEEK, DATEADD(DAY, 7-(DATEPART(WEEKDAY, '20151231')), '20151231'));
哪个 return 2016/01/02 - 1.
SQL 服务器 DATEPART 函数有两个选项来检索周数;
ISO_WEEK
和 WEEK
。我知道两者之间的区别,我想根据美国遵循的星期日开始标准获得周数;即 WEEK
。但它并没有像我预期的那样处理部分周。例如
SELECT DATEPART(WEEK,'2015-12-31') --53
SELECT DATEPART(WEEK,'2016-01-01') --1
SELECT DATEPART(WEEK,'2016-01-03') --2
为一个星期给出两个不同的周数,分为两年。我想在工作日实施如下 link 中的内容。
Week numbers according to US standard
基本上我想要这样的东西;
SELECT DATEPART(WEEK,'2015-12-31') --1
SELECT DATEPART(WEEK,'2016-01-01') --1
SELECT DATEPART(WEEK,'2016-01-03') --2
编辑: 基本上我不擅长将一个星期分成两个星期,我必须根据周数进行一些计算,而且一个星期被划分的事实是不可接受的。所以如果以上不可能。
第一周是否可以从 2016-01-03 开始。即在那种情况下我会是这样的:
SELECT DATEPART(WEEK,'2015-12-31') --53
SELECT DATEPART(WEEK,'2016-01-01') --53
SELECT DATEPART(WEEK,'2016-01-03') --1
如果您希望生成日期的周数,它将return年的周数(输入日期)
因此,我认为 sql 服务器将“2015-12-31”视为 2015 年的最后一周。
如果您想要美国编号,您可以通过使用周末的 WEEK 编号而不是日期本身来实现。
首先确保一周第一天的设置在您的系统上实际上是星期日。您可以通过 运行ning SELECT @@DATEFIRST
验证这一点;星期天应该 return 7。如果没有,运行 SET DATEFIRST 7;
首先。
SELECT
end_of_week=DATEADD(DAY, 7-(DATEPART(WEEKDAY, '20151231')), '20151231'),
week_day=DATEPART(WEEK, DATEADD(DAY, 7-(DATEPART(WEEKDAY, '20151231')), '20151231'));
哪个 return 2016/01/02 - 1.