Расчет периода ПОЛНЫХ лет

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
mshp
Сообщения: 7
Зарегистрирован: 11 апр 2006, 04:41

Расчет периода ПОЛНЫХ лет

Сообщение mshp » 12 апр 2007, 04:55

Добрый день!
Нужен расчет периода в годах, но именно полных лет, а вычисдяемое поле типа (Data2 - Data1)/365 округляет результат к ближайшему целому.
Подскажите, пожалуйста, как можно получить целую часть (модуль) числа без округления или округлить в меньшую сторону.

Заранее спасибо!

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 12 апр 2007, 07:54

Или перенести вычисление на клиента или использовать UDF.

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 12 апр 2007, 08:29

А если что-то вроде

Код: Выделить всё

EXTRACT(YEAR FROM DATE2) - EXTRACT(YEAR FROM DATE1)
?

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 12 апр 2007, 11:43

Просто делить - неверный подход. Можно и ошибку в 1 день словить.
Решение есть на sql.ru

mshp
Сообщения: 7
Зарегистрирован: 11 апр 2006, 04:41

Сообщение mshp » 13 апр 2007, 05:35

Спасибо!
На sql.ru очень приятное решение. Все работает
STAG = extract(year from current_date)-extract(year from :vrdate) +
Case
when extract(month from current_date)>extract(month from :vrdate) then 0
when ((extract(month from current_date)=extract(month from :vrdate)) and
(extract(day from current_date)>=extract(day from :vrdate))) then 0
else -1
end;

Ответить