たとえば、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)
残念ながら、Oracleには、可能であれば変換を実行し、それ以外の場合はNULLを返す方法がありません。 SQLServerは最近try_convert()
を導入しました この目的のために。
1つのオプションは、失敗した変換の例外ハンドラーを使用して独自の関数を作成することです。例外ハンドラは単にNULL
を返します 悪いフォーマットの場合。