Vin*_*gsn 4 sql-server date getdate datepart
我不明白为什么DATENAME(GETDATE())给出了与DATENAME(2019-02-01)不同的结果当那是今天的日期
SELECT GETDATE(), DATENAME(w, GETDATE()),DATENAME(dw, 2019-02-01)
Run Code Online (Sandbox Code Playgroud)
返回:
2019-02-01 14:51:46.017 Friday Monday<br>
Run Code Online (Sandbox Code Playgroud)
虽然我希望它能回归:
2019-02-01 14:51:46.017 Friday Firday
Run Code Online (Sandbox Code Playgroud)
2个原因.首先,你正在使用这个价值2019-02-01
; 表达式是"2019减2减1"; 评估为2016
.2016
作为a datetime
是日期'1905-07-10'
(之后的第2,016天'1900-01-01'
).如果你得到的价值WEEKDAY
使用功能DATENAME
的'1905-07-10'
你'Monday'
.
但是,如果将值更改为字符串,因为您(可能)仍在使用datetime
,'2019-02-01'
则将以格式解释该值yyyy-dd-MM
,这意味着您将获得值'Wednesday'
(SELECT DATENAME(WEEKDAY,CONVERT(datetime,'2019-02-01'));
),即2019年1月2日的工作日.
要获得正确的结果,请使用非模糊的文字字符串:
SELECT DATENAME(WEEKDAY,'20190201');
Run Code Online (Sandbox Code Playgroud)
SQL Server中的非模糊日期(时间)格式(无论数据类型)是yyyyMMdd
和yyyy-MM-ddThh:mm:ss.ssss
(如果您不使用,格式yyyy-MM-dd
是非模糊的,请注意,如果您运行以下SQL,则值不同:)datetime
datetime
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];
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
104 次 |
最近记录: |