sql-server - 当今天的日期时,为什么 DATENAME(GETDATE()) 给出的结果与 DATENAME(2019-02-01) 不同?

标签 sql-server date getdate datepart

我不明白为什么 DATENAME(GETDATE()) 给出的结果与 DATENAME(2019-02-01) 今天的日期不同

SELECT GETDATE(), DATENAME(w, GETDATE()),DATENAME(dw, 2019-02-01)

返回:

2019-02-01 14:51:46.017 Friday  Monday<br>

虽然我希望它返回:

2019-02-01 14:51:46.017 Friday  Firday

最佳答案

2个原因。首先,您使用值 2019-02-01;其表达式为“2019 minus 2 minus 1”;其计算结果为 20162016 作为 datetime 是日期 '1905-07-10'(这是 '1900-01- 之后的第 2,016 天) 01')。如果您使用 '1905-07-10' 的函数 DATENAME 获取 WEEKDAY 的值,您将得到 'Monday'.

但是,如果您将该值更改为字符串,因为您(可能)仍在使用 datetime,则值 '2019-02-01' 将是以 yyyy-dd-MM 格式解释,这意味着您将获得值 'Wednesday' (SELECT DATENAME(WEEKDAY,CONVERT(datetime,'2019-02- 01'));),这是 2019 年 1 月 2 日所在的工作日。

要获得正确的结果,请使用明确的文字字符串:

SELECT DATENAME(WEEKDAY,'20190201');

SQL Server 中的明确日期(时间)格式(无论数据类型如何)为 yyyyMMddyyyy-MM-ddThh:mm:ss.ssss(格式yyyy-MM-dd 是明确的如果您不使用datetime,请注意,如果您运行以下 SQL,则 日期时间不同:)

SELECT CONVERT(date,'2019-02-01') AS [date],
       CONVERT(datetime,'2019-02-01') AS [datetime],
       CONVERT(datetime2(0),'2019-02-01') AS [datetime2],
       CONVERT(datetimeoffset,'2019-02-01') AS [datetimeoffset];

关于sql-server - 当今天的日期时,为什么 DATENAME(GETDATE()) 给出的结果与 DATENAME(2019-02-01) 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54481039/

相关文章:

sql - Delete From 语句中带有别名的表变量

SQL Server查询获取每天的计数值

java - 如何在 Wicket 口中创建日期过滤列属性?

c - getdate.y语法疑惑

JavaScript 时间 EST/CST

java - 如何从 JSON 对象中获取日期

sql - 将第一张表的数据排序后从另一张表插入到表中

SQL Server - 不在

Java jsr310 : difference between dates and times

javascript - 无法让过滤器在 AngularJS 中执行