2009-10-08 21 views
5

愚かな簡単な問題ですが、私は優雅な解決策を見つけることができませんでした。私はMySQLの列に時間間隔を保存したいと考えています。たとえば、MySQLで時間間隔の値を保存する最も良い方法は?

1:40(1時間40分) 0:30(30分)です。

次に、クエリを実行して合計します。今私はINT値(1.40)としてそれらを保存しますが、手動で追加する必要があります(私は簡単な方法がない場合を除きます)。

TIMEカラムタイプは最大900時間しか保存できないので、私は数十万時間の上を追跡しているので(ほとんど)役に立たない(1フィールドを多くの異なるエントリ)。

ありがとうございます!

答えて

8

は分だけを保存するので、1:40は100として保存されます。これは簡単に追加できます:100 + 30 = 130。表示するとき、数時間を分:分に変換します。 130分→2:10。

+0

私のアプリの1つでも同様のことをしましたが、代わりに秒を保存して、私の合計でこれらの部分的な分をすべて失うことはありません。 –

+2

はい、秒を追跡する必要がある場合は、秒を実行します。しかし質問は分についてしか聞かない。 – longneck

4

私は単純にINTフィールドに秒または分(または使用している最低の時間値)を格納します。

は例として、次の時間値、1時間34分25秒を格納したい:

5665秒です

。 3367秒です

:だから

その後INTフィールドに5665として値を格納し、あなたが時間値56分7秒を保存したいと言うことができます。後で

サムアップのすべて:バック時間、分、秒に、あなたは2時間30分32秒を取得

変換5665 + 3367 = 9032秒。はい、あなたは変換を行うために数学を行う必要がありますが、それは非常に単純な計算であり、INTを取得する前にINTを保存する前または一度だけ、一度行うので、機械集中的ではありません。

4

intフィールドを使用することができます。特に、MySQLは、日付と時刻の型の整数型の時間単位を使用するためにDATE_ADDDATE_SUB関数を提供しています。例えば

、あなたはdatetime型の列eventDateTimeを持っていて、期間列durationMinutesを持っている場合は、使用して、終了日時を計算することができます:あなたが時間としてそれらを保存したい場合は

DATE_ADD(eventDateTime,INTERVAL durationMinutes MINUTE) 
+0

いいえ、あなたも同様にクエリを表示します – Va1iant

0

ので、整数を保ちます小、あなたは分の数を取って60で割ることができます。

したがって1:40は100/60 = 1.66になります:30は30/60 = 0.5になります。今、あなたは普通にそれらを追加することができます。それは次のようになりますので、

1.66 + .5 = 2.16 

をし、その後、あなたは全体として時間数を持っている、と小数部分は60分以上の数である

.16 * 60 = 10 

だから2:10

次善策は、MySQLがbase60を実行できるかどうかを確認することです。

+1

時間を浮動小数点として保存すると、丸め誤差が発生する可能性があります。 g。 100分は正確に1.66時間ではありません。さらなる操作で、エラーが大きくなります。 – joschi

+0

なぜ浮動ですか?秒が必要な場合は秒を保存してください。これでも32ビットで十分です。丸め誤差にはならないでしょう。ミリ秒間、64ビットのint型(ほとんどのSQLデータベースではBIGINT)があります。 – Frizi

+0

秒単位ではありません。そして、OPはベースとして時間(その分はベースの一部になります)との時間量を格納するための方法を求めていました。何故フロートが理想的に思えたのか思い出さないでください。 – Anthony

0

私はこの周りを探索したときに、私は私が見つけただけで、関連するSO質問についてですときに私は私が投稿するだろうと思ったので、私のような他の失われた魂を助けるために、これはあなたが話している時間間隔の一種ではありません知っています私が今やっていること。

私はむしろ「秒数」、あるいは数分のような正確な値よりもどちらかまたは日であるサブスクリプションの長さを格納しています。だから私の場合、私は "持続時間" INTと( "日"、 "月")の "duration_unit" ENUMを持っています。

6ヶ月のうち6ヶ月間を計算しようとしているのではなく、「6ヶ月間」のサブスクリプションでは、6ヶ月と6ヶ月しか保存していません。

PHPのmktime()メソッドを使用すると、+ 6ヶ月の時間間隔を簡単かつ正確に計算できます。

関連する問題