繁体   English   中英

T-SQL中的日期文字

[英]Date literals in T-SQL

今天,我不小心忘记在日期文字周围添加引号,如下所示:

SELECT DATENAME(dayofyear, '2017-02-05'),  -- with quote marks 
       DATENAME(dayofyear, 2017-02-05)     -- without quote marks

令人惊讶的是,此查询没有发出TypeError或类似消息,而是返回了包含两列的“成功”消息:

701 91

显然, 91表示2017-02-05是2017年的第91天。但是, 701没有意义,因为一年最多可以有366天。

我的问题是:SQL Server如何解释日期文字? 以及如何处理像2017-02-05这样的无效日期文字? 我大概可以理解,SQL Server遵循的是垃圾进出,讨价还价的做法,但是我讨厌这样的“倾斜”错误,所以我想知道幕后发生的事情,这样发现这些错误可能会更容易。

如果你跑

SELECT CAST(2017-02-05 AS DATETIME) 

它将返回1905-07-04 00:00

似乎发生的事情是将2010年(与2017年2月5日的差异)视为1900年1月1日(基本sql日期)之后的天数

所以1900-01-01 + 2010天= 1905年7月4日

但是,当我运行您的查询时,我得到的分别是36185因为7月4日是1905年的第185天。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM