如何使用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(无程序)获取每个月的第一天和最后一天