Мне нужна функция PL/SQL, которая принимает дату и возвращает год в виде числа, включая дробную часть дней. Например, 1995-01-01
будет 1995.000
, а 2015-11-24
будет 2015.897
. Вот что мне удалось произвести:
CREATE OR REPLACE FUNCTION year_fraction (in_date DATE)
RETURN NUMBER
IS
year NUMBER;
days NUMBER;
total_days NUMBER;
BEGIN
year := EXTRACT(YEAR FROM in_date);
days := in_date - TRUNC(in_date, 'YEAR');
total_days := ADD_MONTHS(TRUNC(in_date, 'YEAR'), 12) - TRUNC(in_date, 'YEAR');
RETURN year + days / total_days;
END year_fraction;
Это работает, но кажется, что нужно много работать, чтобы решить довольно простую проблему. Можно ли это сделать более аккуратно?
to_number(to_char(in_date, 'ddd'))
- person pablomatico   schedule 24.11.2015extract(day from in_date)
, но я думаю, что это настолько просто, насколько это возможно, но при этом понятно, какие шаги нужно выполнить. - person David Aldridge   schedule 24.11.2015