sql - Datepart 和 @@datefirst 的区别
问题描述
据我了解,DateFirst 是一周的第一天,或者一周的开始日。但是,当我运行这些查询时,我的结果与我认为我理解的不匹配
select @@datefirst,DATENAME(WEEKDAY,@@datefirst)
SELECT DATEPART(WEEKDAY,'20190113'),DATENAME(WEEKDAY,'20190113')
SELECT DATEPART(WEEKDAY,'20190114'),DATENAME(WEEKDAY,'20190114')
SELECT DATEPART(WEEKDAY,'20190115'),DATENAME(WEEKDAY,'20190115')
SELECT DATEPART(WEEKDAY,'20190116'),DATENAME(WEEKDAY,'20190116')
SELECT DATEPART(WEEKDAY,'20190117'),DATENAME(WEEKDAY,'20190117')
SELECT DATEPART(WEEKDAY,'20190118'),DATENAME(WEEKDAY,'20190118')
SELECT DATEPART(WEEKDAY,'20190119'),DATENAME(WEEKDAY,'20190119');
我得到
7 Monday (this is the @@datefirst line)
1 Sunday
2 Monday
3 Tuesday
4 Wednesday
5 Thursday
6 Friday
7 Saturday
@@datefirst 怎么给我 7 和一天给我星期一,而 7 是星期六?这是配置问题还是我的误解?
解决方案
基于以下Microsoft 文档:
该函数返回一个字符串,表示指定日期的指定日期部分。
语法: DATENAME ( datepart , date )
更新 1
在同一篇文章中的部分:为不在日期参数中的日期部分返回默认值
如果 date 参数的数据类型没有指定的 datepart,则 DATENAME 将仅在 date 参数具有 literal 时返回该 datepart 的默认值。
例如,任何日期数据类型的默认年-月-日都是 1900-01-01。此语句具有 datepart 的日期部分参数、日期的时间参数,并且 DATENAME 返回 1900, January, 1, 1, Monday
因此,当您输入数字时7
,输入被视为1900-01-01 07:00:00
返回Monday
如果您转到 SQL Server 并运行以下命令
select DATENAME(WEEKDAY,'1900-01-01 07:00:00')
它返回
Monday
推荐阅读
- javascript - 我可以合并多个基于 React 子组件回调设置状态的函数吗?
- java - 在 Java 中运行线程会引发异常
- java - 保存整个 Web 请求,Tomcat 9.0
- powershell - 唯一会话 ID
- r - R中的绘图显示我的X轴与“M”代表百万 - 我如何显示实数
- java - Java IntelliJ 项目中的隐式 main()
- python - Pandas - 使用 2 个类创建新列,其中 id 的最后一行是另一个类
- java - Java:使用本地 XSD 和 SchemaFactory 离线验证 XML
- c - strlcpy:源和目标指向同一个对象
- amazon-web-services - kubectl 获取节点无法连接到 AWS EC2 实例上的服务器