SQL Количество лет в полях FromDATE to ToDate - PullRequest
1 голос
/ 14 июля 2009

Предположим, у меня есть

> 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 ]

3 голосов
/ 14 июля 2009

Я бы рекомендовал использовать 365.25 для дней в функции SQL DateDiff, чтобы избежать проблем с високосным годом.

select 
  SUM((DATEDIFF(d, FromDate, ToDAte)) / 365.25) as 'years-count'
from 
  mytableofdates
1 голос
/ 14 июля 2009

Если вы используете Oracle:

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

Второй параметр в TRUNC - это количество десятичных разрядов - запрос, как есть, будет с точностью до одного десятичного разряда.

0 голосов
/ 28 сентября 2012
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/

0 голосов
/ 14 июля 2009

Я думаю, у вас неправильные расчеты - первый должен быть 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 
0 голосов
/ 14 июля 2009

Я думаю, что вам лучше всего использовать DATEDIFF (datepart, startdate, enddate)

Выберите идентификатор, DATEDIFF (мм, StartDate, EndDate) / 12 из вашей таблицы

это должно дать результат после.

Редактировать: Предполагая, что SQL Server

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...