T-SQL中的日期文字

时间:2017-05-02 03:04:51

标签: sql sql-server sql-server-2008 tsql

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

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可能是遵循垃圾进入,bargage out 的做法,我可以理解,但我讨厌" slient"像这样的错误,所以我想知道幕后发生了什么,以便发现这些错误可能更容易。

1 个答案:

答案 0 :(得分:5)

如果你跑

SELECT CAST(2017-02-05 AS DATETIME) 

它会回来 1905-07-04 00:00

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

所以1900-01-01 + 2010天= jul 4 1905

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