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

时间:2017-12-02 16:32:59

标签: sql-server tsql datetime sql-server-2016 sql-server-2017

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

例如:

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

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

1 个答案:

答案 0 :(得分: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 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