当我设置datetime
变量值时,会切换日期和月份。
例如:
declare @date datetime = '2017-12-02 14:56:24.000'
select datepart(month,@date)
结果应该是12,但它是2.问题仅存在于SQL Server 2017上。2016年相同的代码返回12。
答案 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 强>