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
为了避免这种情况,我建议使用独立于文化的 ISO-8601 日期格式。
declare @date datetime = '2017-12-02T14:56:24.000';
或 marc_s 建议将数据类型更改为 DATETIME2
:
DECLARE @date DATETIME2 = '2017-12-02 14:56:24.000';
当我设置 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
为了避免这种情况,我建议使用独立于文化的 ISO-8601 日期格式。
declare @date datetime = '2017-12-02T14:56:24.000';
或 marc_s 建议将数据类型更改为 DATETIME2
:
DECLARE @date DATETIME2 = '2017-12-02 14:56:24.000';