SSMS DATEADD 使用了错误的区域格式

SSMS DATEADD uses wrong region format

出于某种原因,特别是只有 DATEADD 函数使用区域格式 yyyy-dd-mm 而不是正常的 yyyy-mm-dd 用于其他所有内容。我不明白为什么会这样我什至不是美国人。

对我来说 DATEADD(day, 7, '2021-09-01') 作为一列 returns 2021-01-16 的日期时间 00:00:00.000 不是预期的 2021-09 -08 00:00:00.000.

有人知道这是否是 SSMS 中使用 DATEADD 函数的已知问题吗?我正在使用 SQL Server Management Studio v17.9.1

这不是 SQL Server Management Studio (SSMS) 的问题,它只是 IDE for SQL 服务器(告诉我们您正在使用 SSMS 17 就像在被问及您正在使用 Windows 的哪个版本时告诉我们您正在使用 Office 2016),也不是 SQL 服务器,而是您的文字字符串。首先,你应该 really 使用 DATEADD 反对的是一个强类型的日期和时间值;然后你总是得到你期望的值。

然而,对于您的文字字符串,格式 yyyy-MM-dd 而不是 明确的,因为使用(旧)[=12= 时它的解释方式不同] 和 smalldatetime 数据类型。 DATEADD(和DATEDIFF)会将基于字符串的数据类型隐式转换为datetime;这种转换是根据您的语言设置进行解释的(意味着您的格式不明确)。

因此,解决方法是使用明确的格式。对于 SQL 服务器,它们是 yyyyMMddyyyy-MM-ddThh:mm:ss.nnnnnnn。因此 DATEADD(day, 7, '20210901') 将 return 2021 年 9 月 8 日 无论 您的语言设置如何。