出于某种原因,只有 DATEADD 函数使用区域格式 yyyy-dd-mm 而不是正常的 yyyy-mm-dd 用于其他所有内容。我不明白为什么会发生这种情况,我什至不是美国人。
对我来说 DATEADD(day, 7, '2021-09-01') 作为一列返回 2021-01-16 00:00:00.000 的日期时间,而不是预期的 2021-09-08 00:00:00.000。
有谁知道这是否是具有 DATEADD 功能的 SSMS 中的已知问题?我使用的是 SQL Server Management Studio v17.9.1
这是不是与SQL Server Management Studio中(SSMS),这只是一个IDE问题的SQL服务器(你使用SSMS 17告诉我们就像是在告诉我们你在使用Office 2016时问什么版本的Windows的你”重新使用),也不是 SQL Server,而是您的文字字符串。首先,您真正应该使用的DATEADD
是强类型的日期和时间值;那么你总能得到你期望的价值。
至于你的文字串,但是,格式yyyy-MM-dd
是不明确的,因为它是使用(旧)时解释不同的方式datetime
和smalldatetime
数据类型。DATEADD
(and DATEDIFF
) 将基于字符串的数据类型隐式转换为datetime
; 并且根据您的语言设置解释此类转换(意味着您的格式不明确)。
因此,解决方法是使用明确的格式。对于 SQL 服务器,这些是yyyyMMdd
和yyyy-MM-ddThh:mm:ss.nnnnnnn
。因此,无论您的语言设置如何,DATEADD(day, 7, '20210901')
都将返回 2021 年 9 月 8 日。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句