【发布时间】:2019-05-15 14:15:16
【问题描述】:
我试图了解 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 个月。有人可以解释发生了什么吗?
【问题讨论】:
-
提示:这些不是日期。
-
您需要用引号将它们括起来。第一个值是
2015 MINUS 10 MINUS 25,第二个值是2015 MINUS 12 MINUS 27 -
您确定这些值正确地转换为日期吗?对我来说看起来像整数减法
-
这是 T-SQL 缺少日期/时间文字的专用语法以及从
INT到DATETIME的隐式转换的完美结合。书籍的陷阱。更好的是,由于DATETIME使用整天的整数部分,我们有DATEDIFF(DAY, 2015-10-01, 2015-10-05) = -DATEDIFF(DAY, '2015-10-01', '2015-10-05')。不幸的是,可怜的开发人员通过反转符号来“修复”它......
标签: sql-server tsql date