Per il tuo esempio, puoi usare 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)
Sfortunatamente, Oracle non dispone di un metodo per eseguire la conversione, se possibile, e altrimenti restituire NULL. SQL Server ha recentemente introdotto try_convert()
a questo scopo.
Un'opzione è scrivere la propria funzione con un gestore di eccezioni per la conversione non riuscita. Il gestore delle eccezioni restituirà semplicemente NULL
per un formato errato.