SQL统计FromDATE到ToDate字段的年数

SQL统计FromDATE到ToDate字段的年数,sql,Sql,如果我有 > ID FromDate ToDate > -- -------- ------- > 1 01/01/2005 30/6/2007 > 2 01/01/2008 31/12/2009 我想计算这两行中包含的年份。第一排为1.5年+第二排为2年=总共3.5年。如何使用SQL实现这一

如果我有

> ID              FromDate          ToDate 
> --              --------           -------
> 1               01/01/2005         30/6/2007
> 2               01/01/2008         31/12/2009

我想计算这两行中包含的年份。第一排为1.5年+第二排为2年=总共3.5年。如何使用SQL实现这一点?

我认为最好的选择是使用DATEDIFF(datepart、startdate、enddate)

选择ID,DATEDIFF(mm,StartDate,EndDate)/12 从你的桌子上

这应该给你的结果后


编辑:假设使用SQL Server,我认为最好使用DATEDIFF(datepart、startdate、enddate)

选择ID,DATEDIFF(mm,StartDate,EndDate)/12 从你的桌子上

这应该给你的结果后


编辑:假设SQL Server

我想你的计算错了-第一个应该是2.5年?如果是这样的话,这似乎给出了您想要的大致情况(同样是在SQL server中)


我想你的计算错了-第一个应该是2.5年?如果是这样的话,这似乎给出了您想要的大致情况(同样是在SQL server中)


如果您使用的是Oracle:

SELECT TRUNC(SUM(MONTHS_BETWEEN(t.todate, t.fromDate)) / 12, 1)
  FROM TABLE t

TRUNC中的第二个参数是小数位数-查询按原样是一位小数

如果您使用的是Oracle:

SELECT TRUNC(SUM(MONTHS_BETWEEN(t.todate, t.fromDate)) / 12, 1)
  FROM TABLE t

TRUNC中的第二个参数是小数位数-查询按原样是一位小数

我建议在SQL DateDiff函数中的天数使用365.25,以避免闰年问题

select 
  SUM((DATEDIFF(d, FromDate, ToDAte)) / 365.25) as 'years-count'
from 
  mytableofdates

我建议在SQL DateDiff函数中使用365.25作为天数,以避免闰年问题

select 
  SUM((DATEDIFF(d, FromDate, ToDAte)) / 365.25) as 'years-count'
from 
  mytableofdates
在这里找到了解决方案


此处找到的解决方案

使用年和月日期差异(使用年末/月边界)给出第1行=2年/29个月,第2行=1年/23个月。请问你什么时候可以从中获得1.5/2年?你使用的是什么SQL风格?SQL Server?神谕MySQL?别忘了闰年。。。使用年和月日期差异(使用年末/月边界)给出第1行=2年/29个月,第2行=1年/23个月。请问你什么时候可以从中获得1.5/2年?你使用的是什么SQL风格?SQL Server?神谕MySQL?别忘了闰年。。。这与问题有什么关系?您不是指问题中的列,也不是指如何组合多行数据。这与问题有何关系?您不是指问题中的列,也不是指如何组合多行数据。