

いろんなシステムを見てきてＤＢのテーブルに格納する日付項目に対して型がVARCHAR2やDATEであったりするのですが、どう使い分けているのでしょうか。  
VARCHAR2であることのメリット、DATE型にすることのメリットなど何かあるのでしょうか。


CC BY-SA 3.0
2017-08-25T16:20:38.703
37492
2017-08-27T05:32:44.043
17348
question
database
ＤＢのテーブルの日付項目に関して


日付に限らず、型が用意されているのであればそれを使うのが大原則です。文字列として保存してしまうと、計算や比較をするのにいちいちややこしい処理が必要になります。無意味ですしバグのものとです。

文字列型を使うのは、データの都合などでそうせざるを得ないなど消極的な理由の場合のみです。西暦和暦が混在していてそのままの形で保存しないといけないとか、n月0日みたいな無効日に特別な意味があるとか。

文字列型が使用されるもう一つの理由として、「なんでも文字列型」にしたがるおかしな人が一定います。ひどい人になると数値ですら文字列型で保存しろという主張をしてたりします。


CC BY-SA 3.0
2017-08-26T01:58:13.663
37502
2017-08-26T01:58:13.663
5793
37492
answer


日付型が提供されているなら、日付型を使うのがベストと考えます。文字列型での格納はパフォーマンスでもデメリットが大きいです。大小関係の比較などについては、インデックスも使われません。経過日数を計算するような関数が提供されていても、前段で型変換をおこなう必要が生じます。

文字列型で格納するメリットは殆どありません。無理に上げるなら移植性の高さです。データベースが異なれば、日付型でも有効桁数や格納可能な範囲など、随分と扱いが異なります。また文字列型ならロケールの設定によって挙動が異なると言った事もありません。異なるデータベース間での互換性を重視して最小公約数的な機能しか使わないという制約下なら、文字列型格納するメリットもあるでしょう。


CC BY-SA 3.0
2017-08-27T05:32:44.043
37520
2017-08-27T05:32:44.043
12774
37492
answer