如何使用sql获取前一天的记录?

Posted

技术标签:

【中文标题】如何使用sql获取前一天的记录?【英文标题】:how to get records of previous day using tsql? 【发布时间】:2012-02-14 16:00:42 【问题描述】:

我需要前一天的所有记录吗?

你好

Select * from table1 where tabledate > getdate() -1 

使用此查询,我需要在午夜之后运行才能获得准确的结果。我需要在白天运行它并获取前一天的所有记录。

【问题讨论】:

SQL statement to select all rows from previous day的可能重复 【参考方案1】:

在 SQL Server 2005 中,这通常是将日期时间转换为日期的最快方法:

DATEADD(day, DATEDIFF(day, 0, yourDate), 0)

在你的情况下,它只完成一次,所以如何并不重要。但它确实给出了以下查询。

Select
  *
from
  table1
where
      tabledate >= DATEADD(day, DATEDIFF(day, 0, getDate()) - 1, 0)
  AND tabledate <  DATEADD(day, DATEDIFF(day, 0, getDate()),     0)

【讨论】:

【参考方案2】:

查看此页面。它是计算日期的绝佳资源。

http://www.simple-talk.com/sql/learn-sql-server/robyn-pages-sql-server-datetime-workbench/#calculatingdates

【讨论】:

【参考方案3】:

另一种方法是单独使用DATEDIFF

SELECT * FROM table1
WHERE DATEDIFF(DAY, tabledate, GETDATE()) = 1

日期差异为 1 的日期涵盖前一天的任何时间。

【讨论】:

它还会用一块巨大的石头砸到优化器上。如果tabledate 字段被索引,这个版本将能够在索引上使用范围搜索。相反,它需要扫描整个索引,计算每个唯一值的 DATEDIFF()。这是因为正在搜索的字段现在隐藏在您的函数调用中。替代方法稍长一些,但将所有函数调用保持在常量上,因此可以实现更快的 seek【参考方案4】:
DECLARE @d SMALLDATETIME;
SET @d = DATEDIFF(DAY, 0, GETDATE());

SELECT <cols> FROM dbo.table1
  WHERE tabledate >= DATEADD(DAY, -1, d)
  AND tabledate < @d;

【讨论】:

【参考方案5】:

试试这个:

your_field = cast(dateadd(D,-1,getdate()) as DATE)

【讨论】:

以上是关于如何使用sql获取前一天的记录?的主要内容,如果未能解决你的问题,请参考以下文章

如何在n个月内使用sql(无程序)获取每个月的第一天和最后一天

sql作业查看历史记录只显示一天

sql server中如何查找一天内固定时间段内某个字段对应的记录条数?

sql如何取某年某月的第一天和最后一天

这个 SQL 函数如何获取上个月的第一天?

如何使用 MS SQL 获取所有字段记录中使用的不同单词列表?