1

私はSQLを初めて使用し、時間関数はmySQLとは異なるため、USEFULタイムスタンプクエリを使用して適切なサイト参照を見つけるのにひどい時間を過ごしています。

SQLでこのクエリを実行する正しい方法を見つけることができません:

Id          Timestamp
-----------------------------------
1145744 2012-10-10 18:15:11.500
1145743 2012-10-10 18:15:11.313
1145742 2012-10-10 18:15:11.313
1145741 2012-10-10 18:15:11.253
1145740 2012-10-10 18:15:11.190
1145739 2012-10-10 18:15:11.190
1145738 2012-10-10 18:15:11.127
1145737 2012-10-10 18:15:11.067
1145736 2012-10-10 18:15:11.063
1145735 2012-10-10 18:15:10.940
1145734 2012-10-10 18:15:10.817


SELECT * from table WHERE Timestamp ... RANGE

次のパラメータで行を選択できるように、2つのタイムスタンプの範囲が必要です。

  1. 2番目の範囲
  2. 分の範囲
  3. 時間範囲
  4. 日の範囲
  5. 週の範囲
  6. 月の範囲
  7. 年の範囲

2つのタイムスタンプを入力して範囲を取得する関数は1つありますか?それとも、これは私が必要とする機能の組み合わせですか?

どんな良いサイト参照も大いに高く評価されるでしょう。MSDNサイトは、これを行う適切な方法を分離するのに役立っていません。今日の午後1時30分から午後1時30分までの最終日を取得しようとして約1時間を探していました。

4

2 に答える 2

4

<code> DATEPART </ code>を使用して、以下を取得できます。

second, minute, hour, day, week, month, year

詳細については、を参照してください

条件を使用してwhere、目的の範囲を取得します。

于 2012-10-11T04:21:12.387 に答える
1

私はあなたが本当に欲しいものを理解するのに苦労しています。これまでのコメントに基づいたいくつかの例を次に示します。

10-11、または1-5

SELECT * from table WHERE Timestamp >= '20121011 10:00'
                      and Timestamp <  '20121011 11:00'
SELECT * from table WHERE Timestamp >= '20121011 01:00'
                      and Timestamp <  '20121011 05:00'

または、自動的に変更するために「今日」が必要な場合は、

SELECT * from table WHERE Timestamp >= DateAdd(Hour,10,CAST(GetDate() as Date))
                      and Timestamp <  DateAdd(Hour,11,CAST(GetDate() as Date))

昨日の午後1時30分-今日の午前3時

SELECT * from table WHERE Timestamp >= '20121010 13:30'
                      and Timestamp <  '20121011 03:00'

はい、1日で1時間
です。さて、これを解決するためにDATEPARTを使用する場合、10-11としましょう。

SELECT * from table WHERE DATEPART(hour,Timestamp) = 10

これは数日にわたって実行され、 SARGABLEではありません。つまり、実際には必要なものではないインデックスで検索することはできません。


これらはどこから来るのですか?

  • 2番目の範囲
  • 分の範囲
  • 時間範囲
  • 日の範囲
  • 週の範囲
  • 月の範囲
  • 年の範囲
于 2012-10-11T04:49:37.193 に答える