Für Ihr Beispiel können Sie case
verwenden :
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)
Leider hat Oracle keine Methode, um die Konvertierung nach Möglichkeit durchzuführen und ansonsten NULL zurückzugeben. SQL Server hat kürzlich try_convert()
eingeführt zu diesem Zweck.
Eine Möglichkeit besteht darin, eine eigene Funktion mit einem Ausnahmehandler für die fehlgeschlagene Konvertierung zu schreiben. Der Ausnahmehandler würde einfach NULL
zurückgeben für ein schlechtes Format.