2013-03-19 19 views
7

日時を保存する場合は、別の日時に保管するか、1つの日時を使用する方が良いでしょうか?1つの日時の代わりに日付と時刻を別々に使用する場合

1つの日時の代わりに日時を使用するのはいつですか?

クエリを日付または時刻のいずれかでフィルタ処理したいと考えています。

+1

実際に使用する必要があるものによって異なります。デフォルトで使用するだけの理由はありません。 – CathalMF

答えて

5

SQL Server 2008にはdate and time data typesがありますので、これは問題になりません。

もしそれが本当にあなたのビジネスとどのようにデータをクエリするかによって異なります。あなたがいるかどうか、時間の瞬間について話しているとき

たとえば、あなたが分離DateTime列を使用して任意の日のために1と2 PM間のすべての注文の場所を知りたい場合は、それより早く

+0

興味深い点は、クエリが時間間隔だけで早いことです。それを実証するためのデータがありますか?これは前提条件のインデックス構造に基づいていますか? –

+1

DATETIME列を使用してデータを照会すると、時間がたつにつれてフィルタリングが複雑になります。 –

+0

はい、いつでも日付を使用してデータを照会することができます。 – Harke

1

技術的な観点から言えば、日付は常に時刻と時刻が常に日付です。データベースにTimeを格納すると、デフォルトの日付が適用されます。日付のみを保存する場合、時刻はその日付の深夜(00:00:00)になります。

私の意見では、日付と時刻を比較する必要があるかどうかに関係なく、関数を1つのフィールドに適切に適用できるので、両方を一緒に保存することが常にベストプラクティスです。

+2

eh - no。それは文脈が何であるかに依存します。たとえば、レストランの営業時間には日付の前後関係がない時間コンポーネントがあり、2月14日にはバレンタインデーが特別な時間を要することなく行われます。 –

+0

私の投稿を更新します。私は技術的なレベルを意味しましたが、それは、日付と時間という言葉に使用された大文字で明らかになることが期待されました。 – aaroncatlin

8

ようになります普遍的な瞬間、または特定の日時を誰かのローカルカレンダーで使用する場合は、datetimeを使用します。観察者に関係なく正確な瞬間を話していることを確認したい場合は、datetimeoffsetを使用します。

dateだけを保存している場合は、「この日付の任意の時刻」を意味する時刻コンポーネントを含まない日付を意味します。

timeだけを保存している場合は、日付コンポーネントがない時間を意味します。「任意の日付にこの時刻」または「他の手段で決定された日に」を意味します。

datetimeの両方が同じ行に座っているのは、ほぼ同じことですが、実用的なpurpouseはありません。そのためにはdatetimeを使用してください。

1

日付と時刻を分離する程度華麗何も、彼らは同じ問題を議論してきた

ここ

より良いあなたが同じ列に日付と時間を節約するには、それをチェック:are-there-any-good-reasons-for-keeping-date-and-time-in-separate-columns

あなたはまた、日付を取得することができます時刻をクエリで別々に設定する

SELECT 
    CONVERT(VARCHAR(10),GETDATE(),111) as DatePart, 
    convert(varchar(15), getdate(), 108) TimePart 
+0

実際に分割する理由があります。たとえば、時間を気にしないときにDateデータ型を使用すると、年齢計算がずっと簡単になります。時間データ型はシフト計算を行うのに優れています。私は、日付に関係なく午後5時に働いた皆が欲しいです。あなたのようにそれらを分割することができますが、それらはvarcharであり、特定の計算ははるかに難しくなります。 '01:00:00 PM 'または'12:30:00 AM'の方が大きいですか? –

2

時間を気にしない場合は、日付データ型としてのデータです。顧客の誕生日のコラムを考えてみてください。この時間を使うと思うことはあまりありません。バグが頻繁に発生する場合は、コンバート文を使用して削除する必要があります。また、これらの値を必要としない場合は、追加の領域を消費します(3バイトは8に比べて)。

私は、tinyintなどの代わりにbigintとしてIDを持つステータスコードテーブルを持つことに似ていると思います(ステータスコードの数によっては、あなたが持っている予定のコードの数によって異なります)。

データを使用するのは単なる問題です。そのデータが必要になる可能性が高いと思ったら、datetimeを使用し、それ以外の場合はdateを使用してください。

関連する問題