Это рисунок 10-41 из учебника Кастила 12 c SQL.
В книге приведен пример, который работает на моем местном SQL разработчику и возвращает неверное число лет, как он полагает запрос на 1909, а не на 2009 год.
select empno, lname, fname,hiredate,
ROUND(MONTHS_BETWEEN(hiredate, '01-JUL-09')/12,2) "Years",
case
when (months_between('01-JUL-09', hiredate)/12) < 4 then 'Level 1'
when (months_between('01-JUL-09', hiredate)/12) < 8 then 'Level 2'
when (months_between('01-JUL-09', hiredate)/12) < 11 then 'Level 3'
when (months_between('01-JUL-09', hiredate)/12) < 15 then 'Level 4'
else 'Level 5'
end "Retire Level"
from employees;
Возвращает в диапазоне от 82 до 89 лет (до 2 десятичных знаков), но в учебнике он показывает диапазон возвращаемых значений от 10 до 17 лет, потому что это правильно выполняя вычисления за 2009 год.
Так что я изменил его на 2009
, но получил тот же результат:
select empno, lname, fname,hiredate,
ROUND(MONTHS_BETWEEN(hiredate, '01-JUL-2009')/12,2) "Years",
case
when (months_between('01-JUL-2009', hiredate)/12) < 4 then 'Level 1'
when (months_between('01-JUL-2009', hiredate)/12) < 8 then 'Level 2'
when (months_between('01-JUL-2009', hiredate)/12) < 11 then 'Level 3'
when (months_between('01-JUL-2009', hiredate)/12) < 15 then 'Level 4'
else 'Level 5'
end "Retire Level"
from employees;
Как мне сказать SQL, что это 2009 год для вычисления month_between