Som ditt exempel kan du använda 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)
Tyvärr har Oracle ingen metod för att göra konverteringen, om möjligt, och annars returnera NULL. SQL Server introducerade nyligen try_convert()
för detta ändamål.
Ett alternativ är att skriva din egen funktion med en undantagshanterare för den misslyckade konverteringen. Undantagshanteraren skulle helt enkelt returnera NULL
för ett dåligt format.