2017-12-02 151 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 **以來的建議.... –

相關問題