Gui*_*doG 1 t-sql sql-server date sql-server-2019
我已阅读此文档
所以我尝试了这个实验
declare @t table (test date)
insert into @t values ('20220404'), ('20220405'),('20220406'),('20220407'),('20220408'),('20220409'),('20220410')
select datename(weekday, test),
datepart(weekday, test)
from @t
Run Code Online (Sandbox Code Playgroud)
它返回这个
| 第一栏 | 第2栏 |
|---|---|
| 周一 | 2 |
| 周二 | 3 |
| 周三 | 4 |
| 周四 | 5 |
| 星期五 | 6 |
| 周六 | 7 |
| 星期日 | 1 |
我检查了我的值或@@DATEFIRST
select @@DATEFIRST
Run Code Online (Sandbox Code Playgroud)
它返回7
那么为什么我没有得到文档中描述的结果呢?
| 第一栏 | 第2栏 |
|---|---|
| 周一 | 1 |
| 周二 | 2 |
| 周三 | 3 |
| 周四 | 4 |
| 星期五 | 5 |
| 周六 | 6 |
| 星期日 | 7 |
编辑
这是我在文档中看到的
我认为您可能误解了文档。正如您所见,文档是这样说的:DATEFIRST
设置一周的第一天
因此, 的值DATEFIRST决定哪一天编号为1,即一周的第一天。当DATEFIRST设置为 7 时,如表所示,星期日将被视为一周的第一天 - 第 1 天。
在这种设置下,DATEPARTforweekday将在任何星期日返回1,因为星期日被视为一周的第一天。
也许不幸的是,数字被用作 的参数SET DATEFIRST,因为自然会出现这种混乱。SET DATEFIRST Sunday如果我们能够让我们的意思变得显而易见,那就太好了,但不幸的是这不是语法。