2011-08-03 22 views
1

MySQLでは、私は時間フィールドを持つテーブルを作成することができ、その値は838:59:59(839時間 - 1秒)にもなります。 PostgreSQLでは、時間フィールドは23:00:00(24時間)を超えることはできません。これを回避する方法はありますか?私は&分が何回か費やされた時間を記録する簡単なDBを作ろうとしているので、2332時間以上になる必要があります。&数分。私はこれをMySQLで行うことができますが、私はこれにPostgreSQLを使う必要があります。私はグーグルではありますが、私が探しているものを見つけられなかったので、私はちょうど正しいキーワードを使用しないことを望んでいます。PostgreSQLで23:59:59以上の時間がかかりますか?

答えて

3

同じ表記法を使用していますが、時刻と経過時間には違いがあります。その値の一部は重複していますが、異なるドメインです。あなたが1日の時間について話しているなら、838は1時間の有効な値ではありません。 838 で、経過時間については1時間有効です。

この区別は、2つの異なるデータタイプ、timestamp and intervalにつながります。

create table intervals (
    ts timestamp primary key, 
    ti interval not null 
); 

insert into intervals values (current_timestamp, '145:23:12'); 

select * 
from intervals; 

2011-08-03 21:51:16.837 145:23:12 

select extract(hour from ti) 
from intervals 

145 
+0

これはまさに私が欲しいものであるように聞こえます。ありがとう! – Forrest

0

私はあなたが正しいと信じていますが、回避するための問題ではありません。 「パンチイン」と「パンチイン」を繰り返した後、intフィールドにデルタを追加するときにUNIXの時間整数を格納することをお勧めします。

これは、使用された秒数を出力します。これは、時間:分:秒形式に簡単に変換できます。

デルタ(差分)は、終了タイムスタンプから開始タイムスタンプを減算することによって計算できます。

+0

私は可能な限りこのようにすることを避けたいと考えていましたが、これを行うには最良の方法だと思われます。 – Forrest

+0

Mmn、申し訳ありません。しかし、タイムスタンプのパラダイムは本当に簡単ですが、プログラミング言語から簡単に操作できます。整数をサポートするということです。一度使いこなれば気分は良くなりますし、設定された時間を追加することは(擬似コードの例)var +(1 * 60 * 60)と同じくらい簡単です。運が良かった。 –

+0

いいえ、INTERVALデータ型を使用するだけです。 –

0

あなたは日時フィールドを使用することができます...オーダー34.9日に何かをされ839時間...

+0

間隔を表すために特別に設計されたデータ型を使用するのではなく、839時間を表すために入力する日時の値は何ですか? –

6

Postgresはない「時間のフィールドを」持っていない - それは異なるニーズを満たす数date/time typesています。私があなたのニーズに合っていると信じるタイプは、INTERVALです。

関連する問題