За вашия пример можете да използвате case
:
select (case when my_year is not null and my_year <> 0 and
my_year between -4713 and 9999
then TO_DATE(my_year || '-01-01', 'YYYY-MM-DD')
end)
За съжаление, Oracle няма метод за извършване на преобразуването, ако е възможно, и в противен случай връща NULL. SQL Server наскоро представи try_convert()
за тази цел.
Една от възможностите е да напишете своя собствена функция с манипулатор на изключения за неуспешното преобразуване. Манипулаторът на изключения просто би върнал NULL
за лош формат.