當我設置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
當我設置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
的問題相同的代碼上存在的問題只存在在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';
或者只是使用'DATETIME2(n)'而不是'DATETIME' - 自SQL Server ** 2008 **以來的建議.... –
使用的格式,是不是語言或其他連接設置敏感 - 如@ lad2025建議。爲了更好地理解這一點,請閱讀[this](http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes) – SMor
爲什麼使用datetime而不是datetime2?你不會有這個問題嗎? –
爲什麼應該停止使用'DATETIME'並使用SQL Server ** 2008 **中引入的'DATETIME2(n)'數據類型**的**原因之一。該數據類型不會**顯示相同的行爲 - 日期時間總是正確解釋,因爲你期望它是 –