为什么 DATEDIFF 返回 -1

吉姆普

我试图了解 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 值,因此您会得到一个负数。intdatetimeintDateTime
int'1900-01-01'

正如 Jeroen Mostert 在他的评论中所写的那样 - 书籍的陷阱。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么datediff返回的天数比实际差额少1天?

来自分类Dev

为什么 DateDiff 返回日期而不是分钟数?

来自分类Dev

为什么乘积[]返回1?

来自分类Dev

为什么〜0返回-1?

来自分类Dev

为什么间隔设置为秒时,SQL Server中的DATEDIFF返回错误

来自分类Dev

为什么binary.Size()返回(-1)?

来自分类Dev

为什么此查询返回-1?

来自分类Dev

为什么变量_count总是返回-1?

来自分类Dev

为什么indexOf()返回正确值的-1?

来自分类Dev

为什么返回3,1?

来自分类Dev

为什么fseek从不返回-1

来自分类Dev

为什么mblen()总是返回1?

来自分类Dev

为什么tellg()在代码末尾返回-1?

来自分类Dev

为什么绑定函数返回-1

来自分类Dev

为什么此IndexOf调用返回-1?

来自分类Dev

BASH:为什么`printf`返回1?

来自分类Dev

为什么此查询返回-1?

来自分类Dev

为什么indexOf()返回正确值的-1?

来自分类Dev

为什么`count(new stdClass);`返回1?

来自分类Dev

为什么变量_count总是返回-1?

来自分类Dev

Matlab Buttord返回Wn> 1为什么?

来自分类Dev

为什么DatagramSocket的getPort()返回-1?

来自分类Dev

为什么SELECT COUNT(*)返回1

来自分类Dev

为什么Content-Length返回-1?

来自分类Dev

为什么结构大小总是返回-1?

来自分类Dev

为什么我的代码总是返回1?

来自分类Dev

为什么mblen()总是返回1?

来自分类Dev

为什么这个安装命令返回 1?

来自分类Dev

为什么我的存储过程返回 -1?