0

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

例如:

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

结果应该是 12 但它是 2。该问题仅存在于 SQL Server 2017 上。2016 上的相同代码返回 12。

4

1 回答 1

1

该问题仅存在于 SQL Server 2017 上。2016 上的相同代码返回 12。

它不依赖于 SQL Server 版本,只是不同的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 演示


为避免这种情况,我建议使用与文化无关的 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 演示3

于 2017-12-02T16:36:12.370 回答