2009-05-01 14 views
7

どのように時間または時間範囲をSQLに格納しますか? 午後4時30分(1月3日、午後4時30分)というだけのため、日時にはなりません。 これは、毎週または毎日のミーティングになります。 私が必要とするクエリの種類はもちろん表示用ですが、後でスケジュール内の競合を回避するなどの複雑なクエリも含みます。 私はむしろそれのために最高のデータ型を選んでいます。時刻をSQLに格納

私は、MS SQL Server Expressのに2005

感謝を使用しています!

ネイサン

答えて

4

私は、DateTimeデータ型を使用して、日付値を無視して、まだ推薦する - 理想的なSQL(Googleのそれ)の静的MinDateプロパティを使用して。これにより、強く型付けされたフィールドで作業することの利点が得られ、唯一のコストは数バイト余分になります。

範囲は、2つの別々の列に格納します。次に、一方を他方から減算して差を求めることができます。

編集:グーグルをしました。

  • SQL Server 2008では、Timeデータ型が追加されているため、考慮する必要があります。
  • あなたは、SQL 2005ののDateTime型を使用してちょうどHHを抽出するために、CONVERT関数とそれを組み合わせることができます:MM:SS.MMM
  • 異なるSQLバージョンは、異なる最小日付をサポートします。 2000年1月1日のようなすべてでサポートされる静的な日付を使用するか、SQL 2005の最小値1/1/1753を使用してその開始日に時間値を追加することができます。

Soもしあなたが2005年にこだわるなら、2000年1月1日のようなあなたの静的な日付を選び、あなたの時間をそれに保存します。したがって、1m:30sは2000-1-100:01:30.000、1h:15mは2000-1-1となります。01:15:00.000

次に、Date2 - Date1を実行し、 1h:15:m - 1m:30s)2000-01-01 01:13:45.000。それを変換すれば1:13:45になります。

+0

このようにCONVERTを使用すると、datetime列のインデックスの使用が無効になることに注意してください。 –

+0

興味深いことに、私はその影響を認識していませんでした。先端のおかげで – STW

+0

将来の読者のために、このメソッドを使用する前に、@ tvanfossonのコメントのコメントをhttp://stackoverflow.com/questions/812631/store-time-of-the-day-in-sql?lq=1#comment622411_812669 – Termiux

1

必要に応じて、24時間形式でintとして格納できます。

または一部の固定の日付と日時として記憶し、表示するために、必要に応じてそれを削除: 2000年1月1日16:30

それはあなたに関連するすべての日時の力を与えるように私は、日時フィールドとなるだろう機能性。

1

真夜中からの分数を表すint列として格納することを検討してください。エンティティでは、これを同じものを表すTimeSpan(またはint)として公開することができます。クエリを実行するためには、表示値(時間形式)とデータベース値(分)を変換するだけで済みます。これはエンティティ(TimeSpan.TotalMinutesなど)で簡単に行うことができます。

+0

それは公平な解決策ですが、テーブルを見て直感的ではなく、簡単に変更することはできません(既存の値を変更する必要がある場合はどうすれば解決できるでしょうか)。提供されたデータ型を使用すると、特に時間などの本質的なルールを持つデータに対して、手作業の数を多くする必要がなくなり、将来の開発者にとってははるかに明白になります。 – STW

+0

要求される精度が秒であると仮定すると、代替はhhmmssの形式のintです。 2倍の差を計算する必要があるが、より読みやすいクエリを作成する必要がある場合には有用ではない - WHERE Time> = 120000 AND Time <130000. – Joe

+1

@Yooder - これは、DateTimeを使用すると、この目的のためです。通常、DateTimeを使用すると、日付部分が有効であると予想されます。将来の開発者が他の日付を固定小数点として使用することを決めた場合(またはDateTime.Todayを使用する場合)はどうなりますか?これを「MinutesFromMidnight」という適切な名前の列として保存すると、意図が何であるかが非常に明確になります。数学は同じ午後2時30分にはまだ午後1時30分後と午後2時30分前に動作します。変換は簡単です:TimeSpan.FromMinutes()。 TimeSpanも簡単にフォーマットできます。 – tvanfosson

6

これは個人的に私は別の時刻データ型を持つ2008にアップグレードする理由がわかります。

+0

私は、特に私たちはExpress版(これは大きな生産システムではないことを意味することを願っています)について話しているので、その概念を2番目にします。少しのアップグレードの痛みはここでそれに値するでしょう。 – STW

+0

+1合意...... –

0

私には、ミーティングを表示するための会議スケジューラのタイプなどを開発しているようです。

私はそれをdatetimeフィールドとしてMeetingStartとMeetingEndの2つの列で設定すると思います。このようにして、会議の長さを決定することができます。すでに日付があるので、簡単にカレンダーなどに表示することができます。

関連する問題