从CountDATE到ToDate字段的SQL Count Years

时间:2009-07-14 06:19:02

标签: sql

假设我有

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

我想计算这2行中包含的年份。这是第一排的1。5年+第二排的2年=总共3。5年。我怎么能用SQL做到这一点?

5 个答案:

答案 0 :(得分:3)

我建议在SQL DateDiff函数中使用365.25来避免闰年问题。

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

答案 1 :(得分:0)

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

选择ID,DATEDIFF(mm,StartDate,EndDate)/ 12 来自YourTable

这应该给你的结果。

编辑:假设SQL Server

答案 2 :(得分:0)

我认为你的计算错误 - 首先应该是2。5年?如果是这样,这似乎给你想要的东西(再次在SQL服务器中)

create table YearDiff(ID int, fromDate datetime, toDate datetime)
go
insert into YearDiff values (1, '2005-01-01 00:00:00.000', '2007-06-30 00:00:00.000')
insert into YearDiff values (2, '2008-01-01 00:00:00.000', '2009-12-31 00:00:00.000')
select sum((datediff(ww, fromdate, todate)) / 52.0)  from YearDiff 

答案 3 :(得分:0)

如果您使用的是Oracle:

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

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

答案 4 :(得分:0)

SELECT DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(),'1978-09-29')), '%Y')+0 AS age

在此处找到解决方案http://goharsahi.wordpress.com/2007/08/18/calculating-age-from-date-of-birth-in-mysql/