我对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中有关于这种情况的信息,但没有解决此问题的方法。
答案 0 :(得分:2)
文档不是很清楚,但是我很确定datediff()
正在计算两个日期之间的边界数。 (这就是SQL Server中非常相似的功能的工作方式。)因此,对于year
,它计算的是“ Dec 31st / Jan 1st”边界的数量。 此在文档中有明确说明。
如果想要更准确的计数,可以使用较小的增量。以下内容非常接近:
(datediff(day, w.from, t.to) / 365.25) as years_diff