0

シナリオ:

タイムスタンプ フィールドを持つ大量のレコード (200 万) を含むログ テーブル。主キーとしての ID 以外のインデックスはなく、インデックス (またはその他の永続オブジェクト) の作成は問題外です

昨日のすべてのレコードを選択したい。

私はそれを行ういくつかの方法があることを知っています.「最良の」方法について意見を求めたいだけです.最善とは最速を意味します.

ここでのトリックは、タイムスタンプの「時間」です。なぜなら、今が午前 11 時で、次のようなことをするからです。

where modifiedDate between dateadd(dd,-1,getdate()) and getdate()

11 時に昨日のレコードのみを取得し、今日のデータを取得します

そのSQL 2005なので、「日付」データ型はありません

4

2 に答える 2

5
SELECT *
FROM  myTable
WHERE modifiedDate >= dateadd(day,datediff(day,0,GETDATE()),-1)
    AND modifiedDate < dateadd(day,datediff(day,0,GETDATE()),0)

デモによるSQL フィドル

于 2012-05-30T10:19:50.310 に答える
1
SELECT  *
FROM    mytable
WHERE   modifiedDate >= DATEADD(dd, -1, CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME))
        AND modifiedDate < CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME))
于 2012-05-30T10:18:06.167 に答える