【问题标题】:get records from yesterday from log table从日志表中获取昨天的记录
【发布时间】:2012-06-04 13:34:13
【问题描述】:

场景:

具有大量记录(200 万)的日志表,带有时间戳字段。 除了作为主键的 ID 之外没有索引,并且索引(或任何其他持久对象)的创建是不可能的

我想选择昨天的所有记录。

我知道有几种方法可以做到这一点,我只是想就“最佳”方式提出意见,最好是指最快的方式。

这里的诀窍是时间戳的“时间”,因为如果现在是上午 11 点,我会执行以下操作:

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

我只会在 11 点获取昨天的记录,并将获取今天的数据

它的 sql 2005 所以没有“日期”数据类型

【问题讨论】:

    标签: sql performance sql-server-2005 date time


    【解决方案1】:
    SELECT *
    FROM  myTable
    WHERE modifiedDate >= dateadd(day,datediff(day,0,GETDATE()),-1)
        AND modifiedDate < dateadd(day,datediff(day,0,GETDATE()),0)
    

    SQL Fiddle 带演示

    【讨论】:

      【解决方案2】:
      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))
      

      【讨论】:

        猜你喜欢
        • 2017-01-14
        • 2016-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-07
        • 2022-11-15
        相关资源
        最近更新 更多