为什么Firebird中datediff年的结果太高?

时间:2018-07-26 21:04:45

标签: sql firebird firebird2.5

我对firebird中的datediff函数有疑问。当我尝试像这样在sql中比较两个日期(如15.12.1999和30.06.2000)

SELECT
SUM(datediff (YEAR, W.FROM, W.TO)),
SUM(datediff (MONTH, W.FROM, W.TO)),
SUM(datediff (DAY, W.FROM, W.TO))
FROM WORKERS W
WHEN W.ID=1

我得到的结果是1年,6个月和198天,但是值年份不是正确的(当然结果应该是0)我如何编写查询才能在参数year中得到正确的结果?文档中的链接https://firebirdsql.org/refdocs/langrefupd21-intfunc-datediff.html中有关于这种情况的信息,但没有解决此问题的方法。

1 个答案:

答案 0 :(得分:2)

文档不是很清楚,但是我很确定datediff()正在计算两个日期之间的边界数。 (这就是SQL Server中非常相似的功能的工作方式。)因此,对于year,它计算的是“ Dec 31st / Jan 1st”边界的数量。 在文档中有明确说明。

如果想要更准确的计数,可以使用较小的增量。以下内容非常接近:

(datediff(day, w.from, t.to) / 365.25) as years_diff
相关问题