带有负参数的SQL datediff

时间:2014-11-12 07:33:59

标签: sql sql-server date

我是SQL的完整菜鸟并尝试理解为什么此查询返回“115”:

select datediff(yy, -3, getdate())

3 个答案:

答案 0 :(得分:4)

datediff需要三个参数。第一个是interval,第二个是start date,第三个是end date。你传递-3作为开始日期,我们可以在那里显示:

SELECT CAST(-3 AS datetime) -- results in '1899-12-29 00:00:00.000'

因为2014 - 1899年是115,所以你会得到这个结果。

答案 1 :(得分:1)

因为DATEDIFF()计算了2个日期之间的间隔,并且您在其中一个日期中指定了年-3。

首先,日期"零"是SQL Server上的12/30/1899。 其次,你的" -3"是一个不正确的日期格式,因此将其替换为0

2014 - 1899 = 115

使用DATEADD()来实现您想要的目标。

答案 2 :(得分:0)

DateDiff根据您在第一个参数中给出的内容给出年/日/月等的差异。第二个和第三个参数是日期时间值,用于计算差异,即(param2 datetime value - param3 datetime value)。

现在在你的情况下,param2是" -3" 在ms ms sql中运行此查询并观察输出:

select CAST(-3 as datetime)
select GETDATE()
select datediff(yy, -3, getdate())