SQL server DATEPART函数有两个选项来检索周数;
ISO_WEEK
和WEEK
。我知道两者之间的区别,我希望根据美国的星期日开始标准得到周数;即WEEK
。但它并没有像我预期的那样处理部分周。 e.g。
SELECT DATEPART(WEEK,'2015-12-31') --53
SELECT DATEPART(WEEK,'2016-01-01') --1
SELECT DATEPART(WEEK,'2016-01-03') --2
给出一周的两个不同的周数,分为两年。我希望在工作日内实现类似以下链接的内容。
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
答案 0 :(得分:2)
如果您想要美国编号,可以通过获取周末的WEEK编号而不是日期本身来实现。
首先确保系统中一周中第一天的设置实际上是星期日。您可以通过运行SELECT @@DATEFIRST
来验证这一点;周日应该返回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'));
将返回2016/01/02 - 1。
答案 1 :(得分:0)
如果您希望生成一个日期的周数,它将返回一年中的周数(输入日期)
因此,我认为sql server会对待2015-12-31'作为2015年的最后一周。