当我设置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)'数据类型**的**原因之一。该数据类型不会**显示相同的行为 - 日期时间总是正确解释,因为你期望它是 –