sql用途 - sql证书知乎



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

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

这是我现在拥有的:

select  *
from    order_header oh
where   tran_date = sysdate-1

提前致谢。

https://src-bin.com


Answer #1

使用:

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

参考: TRUNC

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


Answer #2

如果你想要昨天的时间戳,请尝试以下方法:

(CURRENT_TIMESTAMP - INTERVAL '1' DAY)

Answer #3

此评论适用于已找到此条目但使用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)

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




plsql