Мне пришлось реализовать функцию разницы в год, которая работает аналогично sybase datediff . В этом случае учитывается разница в реальном году, а не округленная разница в днях. Таким образом, если две даты разделены одним днем, разница в году может быть 1 (см. select datediff(year, '20141231', '20150101')
).
Если необходимо рассчитать разницу в год, используйте:
EXTRACT(YEAR FROM date_to) - EXTRACT(YEAR FROM date_from)
Только для журнала (почти) полная функция датированного числа:
CREATE OR REPLACE FUNCTION datediff (datepart IN VARCHAR2, date_from IN DATE, date_to IN DATE)
RETURN NUMBER
AS
diff NUMBER;
BEGIN
diff := CASE datepart
WHEN 'day' THEN TRUNC(date_to,'DD') - TRUNC(date_from, 'DD')
WHEN 'week' THEN (TRUNC(date_to,'DAY') - TRUNC(date_from, 'DAY')) / 7
WHEN 'month' THEN MONTHS_BETWEEN(TRUNC(date_to, 'MONTH'), TRUNC(date_from, 'MONTH'))
WHEN 'year' THEN EXTRACT(YEAR FROM date_to) - EXTRACT(YEAR FROM date_from)
END;
RETURN diff;
END;";