date
必要に応じて、関数ベースのインデックスを使用して、列を年に 1 つのエントリのみに制限できます。
create unique index uq_yr on <table> (trunc(<column>, 'YYYY'));
同じ年に 2 つの日付を挿入しようとすると、ORA-00001 エラーが発生します。もちろん、残りの日付が必要ない場合は、それを保持するのは役に立たなかったり、混乱したりする可能性がありますが、一方で、保持したい二次的な情報があるかもしれません (たとえば、年次監査を記録している場合)。完全な日付を保持しても問題はないかもしれません)。trunc
おそらく、より簡単に操作できるように、値を保持する仮想列 (11g 以降) を使用することもできます。
また、interval year(4) to month
データ型を使用しnumtoyminterval(2013, 'year')
、 などを使用して挿入することもできます。間隔演算を実行して、年を加算および減算しextract
、年を数値として取得することもできます。date
全体として、それはおそらくを使用するよりも苦痛になるでしょう。
本当に年だけに関心がある場合 (そして、月を別の列に保持していない場合)、数値はおそらく最も単純で、妥当な数値であることを確認するためのチェック制約が適用されます。number(4)
停止しません。2.013
意図したときに挿入します2,013
(ただし、文字列からヒットするには変換する必要があり、NLS パラメーターの不一致はありません) 2
。