0

ここに説明されているテーブルがあります: http://sqlfiddle.com/#!3/f8852/3

時刻の date_time フィールド00:00が間違っています。例えば:

5/24/2013 00:00

これは実際には次のようになります。

5/23/2013 24:00

したがって、時間00:00は前日の最後の時間に対応します (このテーブルは作成していませんが、操作する必要があります)。00:00選択を行うときに、すべての日付を時間として置き換えることができる簡単な方法はあります24:00previous day? Python の for ループで簡単に実行できますが、SQL で構造化する方法がよくわかりません。助けに感謝します。

4

1 に答える 1

4

すべての日時は、有限の長さのスパンではなく、時間内の瞬間であり、1 日だけ存在できます。真夜中を表す瞬間は、定義上、翌日、それが 1 日の始まりである日です。 1 つのカレンダー日付内の時間値は、00:00:00.00000 から 23:59:59.9999 まで変化します。

これは、1 時間の分の値を 0 から 59 ではなく 1 から 60 まで変化させ、60 の値は前の時間の最後の分であると要求することに似ています。

あなたが話しているのは、表示の問題だけです。2013 年 1 月 1 日 24:00 のように日付を入力できたとしても (24:00:00 は法定時刻ではありません)、2013 年 1 月 2 日の終わりではなく、日付の開始時刻として入力されます。 1 月1 日
これを示す 1 つのことは、丸め (SQL は約 300 ミリ秒以内にしか日時を解決できない) のために、真夜中の数ミリ秒前の日時を作成すると、真夜中に切り上げられることに注意してください。次の日に移動します。これは、エンタープライズ マネージャーで次のコマンドを実行するとわかります...

 Select cast ('1 Jan 2013 23:59:59.999' as datetime)

SQL サーバーはすべての日時を 2 つの整数として格納します。1 つは 1900 年 1 月 1 日からの日数を表し、もう 1 つは午前 0 時からのティック (1 ティックは 1/300 秒、約 3.33 ミリ秒) の数を表します。午前 0 時以降の時間間隔がゼロの場合は、前日ではなく同じ日です。

真夜中の 00:00:00 が 1 日の終わりを意味すると想定してデータを挿入していた場合は、それを修正する必要があります。

既存のデータを修正する必要がある場合は、データベース内の時刻コンポーネントとして午前 0 時を含む (つまり、時刻コンポーネントがゼロの) すべての日付に 1 日を追加する必要があります。

   Update tbale set 
      date_time = dateAdd(day, 1, date_time)
   Where date_time = dateadd(day, datediff(day, 0, date_time), 0) 
于 2013-05-24T20:19:47.650 に答える