从日期

时间:2017-03-14 19:06:54

标签: sql-server tsql

我正在寻找一个将从给定日期返回周数的查询。

我已经尝试过的是:

select datepart(wk, '2017-02-01')

但是这会返回5而不是6.(2月1日是一年的第6周)。

(带红色的周数)

enter image description here

2 个答案:

答案 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