Oracle:我如何才能从昨天开始选择记录?

时间:2009-10-15 19:35:16

标签: sql database oracle plsql

我花了几个小时在网上搜索这个问题的答案......

以下是我目前的情况:

select  *
from    order_header oh
where   tran_date = sysdate-1

提前致谢。

6 个答案:

答案 0 :(得分:65)

使用:

AND oh.tran_date BETWEEN TRUNC(SYSDATE - 1) AND TRUNC(SYSDATE) - 1/86400

参考:TRUNC

tran_date上调用函数意味着优化器将无法使用与之关联的索引(假设存在一个索引)。某些数据库(如Oracle)支持基于函数的索引,这些索引允许对数据执行函数以最大限度地减少对此类情况的影响,但IME DBA不允许这些。我同意 - 在这种情况下他们并不是真的有必要。

答案 1 :(得分:16)

trunc(tran_date) = trunc(sysdate -1)

答案 2 :(得分:2)

to_char(tran_date, 'yyyy-mm-dd') = to_char(sysdate-1, 'yyyy-mm-dd')

答案 3 :(得分:1)

如果您不支持将来的日期交易,那么这样的事情可能有效:

AND oh.tran_date >= trunc(sysdate-1)

答案 4 :(得分:1)

此评论适用于已找到此条目但使用mysql而非oracle的读者! 在mysql上你可以做到以下几点: 的今天

SELECT  * 
FROM 
WHERE date(tran_date) = CURRENT_DATE()

<强>昨天

SELECT  * 
FROM yourtable 
WHERE date(tran_date) = DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)

答案 5 :(得分:0)

如果您想要昨天的时间戳,请尝试以下操作:

(CURRENT_TIMESTAMP - INTERVAL '1' DAY)