我正在寻找一个查询,它将返回给定日期的周数.
我已经尝试过的是:
select datepart(wk, '2017-02-01')
Run Code Online (Sandbox Code Playgroud)
但这会返回5而不是6.(2月1日是一年的第6周).
(周数用红色)
Sql*_*Zim 14
您可能需要指定一周的第一天set datefirst:
set datefirst 1;
select datepart(week, '2017-02-01');
Run Code Online (Sandbox Code Playgroud)
回报 6
根据默认语言,您datefirst可能设置为7.
set datefirst 7;
select datepart(week, '2017-02-01');
Run Code Online (Sandbox Code Playgroud)
回报 5
rextester演示:http://rextester.com/KEPB52852
小智 9
您还可以考虑在“datepart”中使用“iso_week”而不是“week”参数。在这种情况下,您可以避免使用“set datefirst 1”,如果您只能使用一个选择,这会很方便。
有关“iso_week”的更多详细信息:“ISO 8601 包括 ISO 周日期系统,这是一个周编号系统。每周都与发生星期四的年份相关联”
你可以这样比较两者:
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
Run Code Online (Sandbox Code Playgroud)
请注意 2020 年 1 月 5 日星期日的差异:
-----------
1
1
1
2
2
2
Run Code Online (Sandbox Code Playgroud)
小智 7
您可以使用以下命令从包含日期的特定列中获取周数:
DATEPART(WK, orders.createddate) AS Week,
Run Code Online (Sandbox Code Playgroud)
这取自下面可用的 DATEPART 函数:
DATEPART(YY, orders.createddate) AS Year,
DATEPART(QQ, orders.createddate) AS Quarter,
DATEPART(WK, orders.createddate) AS Week,
DATEPART(DY, orders.createddate) AS dayofYear,
DATEPART(MM, orders.createddate) AS Month,
DATEPART(DD, orders.createddate) AS Date,
DATEPART(hour, orders.createddate) AS Hour,
DATEPART(minute, orders.createddate) AS Minute,
DATEPART(second, orders.createddate) AS Second,
DATEPART(millisecond, orders.createddate) AS Millsecond,
DATEPART(microsecond, orders.createddate) AS Microsecond,
DATEPART(nanosecond, orders.createddate) AS Nanosecond,
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31511 次 |
| 最近记录: |