1つのフィールドに、日付と時刻のペアではなく、つまり標準のOracle日付を格納する必要があります。
01/10/2009 22:10:39
しかし、時間のみ
22:10:39
ディスクスペースを節約するか(200万行ある)、処理が高速になると思います。
INTERVAL DAY TO SECONDデータ型を試すこともできますが、ディスク領域を節約することはできません...この目的には非常に適しています。
create table t1 (time_of_day interval day (0) to second(0));
insert into t1 values (TO_DSINTERVAL('0 23:59:59'));
select date '2009-05-13'+time_of_day
from t1;
11バイトですが。
あなたの最善の策は、おそらく「真夜中からの秒数」を数値フィールドとして格納することでしょう。
SELECT to_char( SYSDATE, 'SSSSS' ) FROM dual;
次のように、日付から時刻を文字列として抽出できます。
to_char(sysdate,'HH.MI.SS')
ただし、スペースの節約に役立つ時間のみのデータ型はありません。
あなたは使うことができます:
TO_CHAR(<DATE_COLUMN>, '<TIME_FORMAT>');
例
TO_CHAR(SYSDATE, 'HH24:MI:SS');
時間形式については、チェックインできます ここ
数Mbのディスク領域を節約し(現在では何もありません)、パフォーマンスはほとんど向上しません。
推奨されるように、真夜中からの秒数を格納するためにNUMBER
タイプの列を使用できますが、制約についても忘れないでください。
(DATE
列で使用される定数7バイトの代わりに、格納された値に応じて1〜3バイトを使用するNUMBER(5, 0)
を使用する可能性があります)