我试图了解 DATEDIFF 函数在 SQL Server 中是如何工作的。以下 T-SQL 返回 -1:
SELECT DATEDIFF(MONTH, 2015-10-25, 2015-12-27)
但是,ending_date 是在 start_date 之后,所以我希望是一个正数,而不是一个负数。此外,我预计 10 月 25 日和 12 月 27 日之间的差异为 2 个月。相反,SQL Server 返回 -1 个月。有人可以解释发生了什么吗?
您缺少撇号:
SELECT 2015-10-25 AS First,
2015-12-27 AS Second,
CAST(2015-10-25 As DateTime) AS [First as datetime],
CAST(2015-12-27 As DateTime) AS [Second as datetime],
DATEDIFF(MONTH, 2015-10-25, 2015-12-27) AS WrongResult,
DATEDIFF(MONTH, '2015-10-25', '2015-12-27') AS CorrectResult
结果:
First Second First as datetime Second as datetime WrongResult CorrectResult
1980 1976 04.06.1905 00:00:00 31.05.1905 00:00:00 -1 2
SQL Server 将其2015-10-25
视为 int - 数学表达式的结果 (1980)。in函数
的使用会导致 SQL Server 将值隐式转换为值。该值表示自- 以来的天数- 由于第二个参数导致较小的 int 值,因此您会得到一个负数。int
datetime
int
DateTime
int
'1900-01-01'
正如 Jeroen Mostert 在他的评论中所写的那样 - 书籍的陷阱。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句