Я думаю, что это реализует логику, которую вы хотите:
select (case when extract(month from to_date(substr(fm, 4, 3), 'MON')) >= 4
then to_date('20' || fm, 'YYYY-MON')
else to_date('20' || fm, 'YYYY-MON') + interval '1 year'
end)
from (values ('20-JUL'), ('19-FEB')) v(fm);
Случается, что Postgres позволяет конвертировать месяц в дату. Вы получаете ценность далеко назад во времени. Но я не думаю, что есть какие-либо проблемы, потому что цель состоит только в том, чтобы преобразовать строку в число.