Pro váš příklad můžete použít 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 bohužel nemá způsob, jak provést převod, pokud je to možné, a jinak vrátit hodnotu NULL. SQL Server nedávno představil try_convert()
pro tento účel.
Jednou z možností je napsat vlastní funkci s obslužnou rutinou výjimky pro neúspěšnou konverzi. Obsluha výjimky by jednoduše vrátila NULL
za špatný formát.