T-SQL 在 SQL Server 2017 上设置日期时间变量值时替换日期和月份

T-SQL replacing day and month when setting datetime variable value on SQL Server 2017

当我设置 datetime 变量值时,日期和月份会切换。

例如:

declare @date datetime = '2017-12-02 14:56:24.000'
select datepart(month,@date)

结果应该是 12 但实际上是 2。问题仅存在于 SQL Server 2017。2016 returns 12.

上的代码相同

The problem exist only on SQL Server 2017. The same code on 2016 returns 12.

不依赖SQL服务器版本,只是DATEFORMAT设置不同:

SET DATEFORMAT ymd; 
declare @date datetime = '2017-12-02 14:56:24.000';
select datepart(month,@date);
-- 12

SET DATEFORMAT ydm;
declare @date2 datetime = '2017-12-02 14:56:24.000';
select datepart(month,@date2);
-- 2

Rextester Demo


为了避免这种情况,我建议使用独立于文化的 ISO-8601 日期格式。

declare @date datetime = '2017-12-02T14:56:24.000';

Rextester Demo2

marc_s 建议将数据类型更改为 DATETIME2:

DECLARE @date DATETIME2 = '2017-12-02 14:56:24.000';

Rextester Demo3