Na przykład możesz użyć 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)
Niestety, Oracle nie ma sposobu na wykonanie konwersji, jeśli to możliwe, i zwrócenie w inny sposób wartości NULL. SQL Server niedawno wprowadził try_convert()
w tym celu.
Jedną z opcji jest napisanie własnej funkcji z obsługą wyjątków dla nieudanej konwersji. Obsługa wyjątków po prostu zwróciłaby NULL
dla złego formatu.