Функция months_between()
ожидает две даты. Когда указываются две даты, он возвращает месяцы с плавающей запятой до нескольких десятичных знаков.
Однако «Литерал ORA-01861 не соответствует строке формата» означает, что одна из дат имеет неверный формат дата.
Для БД с 12 c вы можете использовать: validate_conversion()
функцию для обеспечения работы формата даты.
Предполагая, BDATE
это просто строка.
SELECT CASE validate_conversion(BDATE as date)
WHEN 1 THEN trunc(months_between(sysdate, TO_DATE(BDATE, 'YYYY-MM-DD'))/12)
WHEN 0 THEN 0
END "YEARS"
FROM EMPLYEE, works, assign
WHERE SSN = ESSN AND PNO = Pnumber AND Pname LIKE 'P%';