我正在寻找一个将从给定日期返回周数的查询。
我已经尝试过的是:
select datepart(wk, '2017-02-01')
但是这会返回5而不是6.(2月1日是一年的第6周)。
(带红色的周数)
答案 0 :(得分:11)
您可能需要使用set datefirst
指定一周的第一天:
set datefirst 1;
select datepart(week, '2017-02-01');
返回6
根据默认语言,您的datefirst
可能会设为7
。
set datefirst 7;
select datepart(week, '2017-02-01');
返回5
rextester演示:http://rextester.com/KEPB52852
答案 1 :(得分:1)
您还可以考虑在“ datepart”中使用“ iso_week”而不是“ week”参数。在这种情况下,您可以避免使用“设置日期优先1”,如果您只能使用单个选择,这会很方便。
有关“ iso_week”的更多详细信息,在这里:"ISO 8601 includes the ISO week-date system, a numbering system for weeks. Each week is associated with the year in which Thursday occur"
您可以像这样比较两者:
SELECT datepart(ISO_WEEK, '2020.01.01') -- Wed
SELECT datepart(WEEK, '2020.01.01') -- Wed
SELECT datepart(ISO_WEEK, '2020.01.05') -- Sun
SELECT datepart(WEEK, '2020.01.05') -- Sun
SELECT datepart(ISO_WEEK, '2020.01.06') -- Mon
SELECT datepart(WEEK, '2020.01.06') -- Mon
请注意2020年1月5日星期日的区别:
-----------
1
1
1
2
2
2