为什么 DATENAME(GETDATE()) 给出不同的结果为 DATENAME(2019-02-01),而那是今天的



我不明白为什么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 减 2 减 1";其计算结果为 2016 . 2016作为datetime'1905-07-10'日期(即'1900-01-01'后的第 2,016 天)。如果使用函数DATENAME '1905-07-10' 获得 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(如果不使用datetime,则yyyy-MM-dd格式为非歧义格式,请注意,如果运行以下 SQLdatetime的值会有所不同:)

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];

请使用此datetime应为字符串格式(日期格式)

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

输出

2019-02-01 14:01:38.343          Friday          Friday

DateTime 应该用单引号传递!

检查:

DECLARE @date DATETIME = 2019-02-01
SELECT @date

您的初始查询(不带引号)涉及"隐含转换",其中您的日期列正在转换为 varchar(使用该转换的服务器默认格式 [即被视为默认日期加上等于分配值的计算量的天数。

相关内容

最新更新