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 Fiddle with Demo

于 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 回答