我不明白为什么 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”;其计算结果为 2016
。 2016
作为 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 中的明确日期(时间)格式(无论数据类型如何)为 yyyyMMdd
和 yyyy-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/