2009-11-23 12 views
19

1つのフィールドでは、日時のペアではなく、標準のOracleの日付を保存する必要があります。時間のみを保存する方法。日時ではない?

01/10/2009 22:10:39 

しかし、時間だけ

22:10:39 

私は、ディスクスペースを節約すると思います(I 2万行を持っている)、またはより高速な処理を提供します。

+3

2万行を確認することができます実質的に何もありません。貧弱な省スペースは精度の低下の価値があるのでしょうか? – kurosch

+1

私は質問しておかなければならない質問は、「何の高速処理ですか?すべての時間があれば、それを何か他のものと確実に比較することはできないので、何も保存せずに行全体で7バイトを節約することができます。 – kurosch

答えて

10

あなたはSECONDデータ型にINTERVAL DAYを試みることができるが、それは勝ちましたディスク容量を節約できます...しかし、この目的には非常に適しています。

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バイトです。

6

ベストプラクティスは、おそらく "秒より深刻な秒数"を数値フィールドとして格納している可能性があります。

SELECT to_char(SYSDATE, 'SSSSS') FROM dual; 
+1

当然のことながら、(1)常に値を変換するためには、(2)他の標準日付の算術に奇妙な計算を使用するための開発時間のペナルティを考慮する必要があります。 – jva

+0

@jva:ええ、私はそれについて言及するつもりでしたが、私はそれを考えたときに、このスレッドはかなり死んでいたと考えました。なぜなら – kurosch

+1

私はこのアプローチが気に入っています。データは、文字を挿入できないように数値に格納する必要があります。列にチェック制約があり、秒単位で24時間以上入力できないようにしてください。 – Ben

2

あなたはこのような文字列として日付から時間を抽出することができます。

to_char(sysdate,'HH.MI.SS') 

いますが、スペースを節約するのに役立ちますは時間のみのデータ型はありません。

+0

VARCHAR列に何かを格納することができます。これは、再度取得する際にはあまり役に立ちません。 – Ben

0

あなたはいくつかのメガバイトのディスクスペースを節約します(これは今日は何もありません)。

NUMBERというタイプの列を使用して深夜からの秒数を格納することができます。制約を忘れないでください。
(おそらく代わりにDATE列で使用される定数7バイトの格納された値に応じて1〜3つのバイトを使用するNUMBER(5, 0)を使用すると思います)

0
あなたが使用することができ

:時刻形式のため

TO_CHAR(<DATE_COLUMN>, '<TIME_FORMAT>'); 

TO_CHAR(SYSDATE, 'HH24:MI:SS'); 

あなたは、物事の壮大なスキームでhere

関連する問題