Som dit eksempel kan du bruge 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)
Desværre har Oracle ikke en metode til at udføre konverteringen, hvis det er muligt, og ellers returnere NULL. SQL Server introducerede for nylig try_convert()
til dette formål.
En mulighed er at skrive din egen funktion med en undtagelsesbehandler for den mislykkede konvertering. Undtagelsesbehandleren ville simpelthen returnere NULL
for et dårligt format.