当我设置datetime
变量值时,日期和月份会被切换。
例如:
declare @date datetime = '2017-12-02 14:56:24.000'
select datepart(month,@date)
结果应该是 12 但它是 2。该问题仅存在于 SQL Server 2017 上。2016 上的相同代码返回 12。
当我设置datetime
变量值时,日期和月份会被切换。
例如:
declare @date datetime = '2017-12-02 14:56:24.000'
select datepart(month,@date)
结果应该是 12 但它是 2。该问题仅存在于 SQL Server 2017 上。2016 上的相同代码返回 12。
该问题仅存在于 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
为避免这种情况,我建议使用与文化无关的 ISO-8601日期格式。
declare @date datetime = '2017-12-02T14:56:24.000';
或按照marc_s建议将数据类型更改为DATETIME2
:
DECLARE @date DATETIME2 = '2017-12-02 14:56:24.000';