SQL Serverテーブルでは、タイムスタンプという名前のフィールドがあります。これは 'datetime'フィールドです。私が作成した画面では、ユーザーは日付(時間なし)を渡し、その日付のすべてのレコードを返す必要があります。SQL - 日付パラメータと日付との比較
フィールド内の時刻が00:00:00以外の場合、Timestamp = @Dateは機能していないようです。これを行う最も効率的な方法は何ですか?
SQL Serverテーブルでは、タイムスタンプという名前のフィールドがあります。これは 'datetime'フィールドです。私が作成した画面では、ユーザーは日付(時間なし)を渡し、その日付のすべてのレコードを返す必要があります。SQL - 日付パラメータと日付との比較
フィールド内の時刻が00:00:00以外の場合、Timestamp = @Dateは機能していないようです。これを行う最も効率的な方法は何ですか?
SQL Server 2008を使用しているので、DATE
データ型を使用できます。時間がない部分 -
は日付だけで仕事となります
CAST(Timestamp AS DATE) = @Date
との比較を行います。
通常、特定の日付のデータは、ある特定の時点ではなく、範囲内のデータと考えるべきです。だから、理想的なクエリのような、範囲を使用する必要があります。この場合
WHERE [Timestamp] >= @Date
AND [Timestamp] < DATEADD(DAY, 1, @Date)
、幸いにも、オプティマイザは、スマートであり、あなたが列に対してCONVERT(DATE, [timestamp])
を使用する場合は、まだインデックスを使用します。しかし、多くの場合、これはあなたの条項をしばしば非sargableにするので注意する必要があります。
PS Timestamp
はひどい列名です。 SQL Serverのデータ型で、日付または時刻とは関係ありません。
タイムスタンプなしで日付を比較するとよいでしょう。そうでなければ..結果を得る方法? –