2017-12-02 113 views
0

当我设置datetime变量值时,切换日期和月份。在SQL Server 2017上设置日期时间变量值的T-SQL替换日期和月份

例如:

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

的结果应该是12,但它仅2的SQL Server 2017年2016年收益12

+0

使用的格式,是不是语言或其他连接设置敏感 - 如@ lad2025建议。为了更好地理解这一点,请阅读[this](http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes) – SMor

+1

为什么使用datetime而不是datetime2?你不会有这个问题吗? –

+1

为什么应该停止使用'DATETIME'并使用SQL Server ** 2008 **中引入的'DATETIME2(n)'数据类型**的**原因之一。该数据类型不会**显示相同的行为 - 日期时间总是正确解释,因为你期望它是 –

回答

1

的问题相同的代码上存在的问题只存在在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

+1

或者只是使用'DATETIME2(n)'而不是'DATETIME' - 自SQL Server ** 2008 **以来的建议.... –

相关问题