2011-01-06 20 views
1

"7年4ヶ月"(例えば、長年の経験)のようなものをデータベースに保存する最良の方法は何ですか。浮く?DB内の時間の長さを保存する方法

+1

重複しますか? http://stackoverflow.com/questions/718332/what-is-the-best-way-to-represent-a-timespan-in-sql-server-ce – hometoast

+1

@hometoast - different RDBMS – JNK

+0

すべての答えをありがとう。私はintを使うと思う。 – Prabhu

答えて

6

BIGINT秒数またはティック数を格納します。

特定の例(長年の経験)では、開始日を保存し、データベースを読み込む時間を計算する方がよいでしょう。

2

使用長い秒にそのまま

+0

SQL Serverの実際のデータ型ではありません... – JNK

+0

@JNKあなたは正しいです。私は必要な変更を加えた、問題の内側にSQL Serverの言及はありません..タグを除き –

+0

Downvoteが削除されました!編集していただきありがとうございます。 – JNK

0

ストアを変換し、時間差分を表現するために、[bigint型のSQLServerのためのを読みます]。私。文字列7 years 4 months。 なぜですか?さて、もう一方の端から考えると、7年(または4ヶ月)は何ですか?表面上は時間間隔だと思うだろうが、そうではない。月または年はどちらも静的な時間単位(日)を持たないため、実際の値は間隔の開始点によって異なります。

本当にありがとうございましたが、これは問題を解決する唯一の答えです。 7 years 4 monthsは、開始点なしでシリアライズ可能な値ではありません。したがって、提示==値。

+0

これはかなり恐ろしい考えです。イベントbがイベントbよりもどれだけ長くかかるかを知りたければどうなりますか?彼は弦を解析する必要がありますか? – JNK

+0

彼は間違った質問をしています。正しい質問は、「どのように保存するべきか」の代わりに「方法」 –

+0

あなたが言っていることを見るので、私はあなたに+を与えました。私は質問が少しあいまいだと思っています。あなたが与えた答えは、私が考えているものの良いアプローチではないと思います* Prabhuは尋ねようとしていますが、引用した例に基づいて、助言。 (大きな写真を知らないことに基づいて大きい場合)、「就業年」の回答を静的に保存したい場合(開始日などに基づいて計算するのではなく)、ユーザーが「7年4か月」のような文字列を入力し、それをそのまま保管することは理にかなっています。 – Steven

0

このフィールドは変数であるため、これに最も近い方法は、イベントの(推定された)日付を保存することです。

今までの時間は、実行時に計算する必要があります。

編集:必要に応じて、実行時計算で使用する終了日を保存することもできます。

+0

これまでに終了したイベントでは機能しません。 3週間前に2時間走ったものがあったら、あなたの方法はうまくいかないでしょう。 – JNK

+0

あなたは不当な仮定をしています。イベントの期間を保存している場合はどうなりますか? – SLaks

+0

@JNK - 私はそれに応じて私の答えを編集しました –

0

期間を保存すると、開始日と終了日が異なります。これは派生可能な値になり、毎回計算することができます。

年をシミュレートするために7.4を格納する予定の場合は、月単位で制限されます。 7.14の値が追加された場合、どうなるでしょうか?

2

SQL Server 2005には時間のみのデータ型がないため、適切なサイズの整数型を使用して「ある時間間隔」(秒、ミリ秒など)のカウントを保持します。アプリケーション層での翻訳(比較を除く)。 DBがint/bigint /などを除いてそれらを気にする理由はありません

0

長年の経験のようなものを格納している場合、2番目の精度は本当に必要ないと思います。私はちょうど数年で数を保存し、フロートとしてそれを格納します。

したがって、「7年4か月」= 7 + 4/12 = 7.333 ..

関連する問題