oracle 如何选择仅从昨天开始的记录?

zaqlnxep  于 2023-06-29  发布在  Oracle
关注(0)|答案(6)|浏览(166)

我花了几个小时在网上搜索这个问题的答案。。
以下是我目前拥有的:

select  *
from    order_header oh
where   tran_date = sysdate-1
a2mppw5e

a2mppw5e1#

用途:

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

参考:TRUNC
tran_date上调用函数意味着优化器将无法使用与之关联的索引(假设存在)。一些数据库,如Oracle,支持基于函数的索引,允许对数据执行函数以最小化这种情况下的影响,但IME DBA不允许这些。我同意-在这种情况下,他们真的没有必要。

7z5jn7bk

7z5jn7bk2#

trunc(tran_date) = trunc(sysdate -1)
w51jfk4q

w51jfk4q3#

如果你不支持未来日期的交易,那么像这样的东西可能会起作用:

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

8wtpewkr4#

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

vkc1a9a25#

这篇评论是给那些已经找到这篇文章但正在使用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)
ia2d9nvy

ia2d9nvy6#

如果你想要昨天的时间戳,可以这样做:

(CURRENT_TIMESTAMP - INTERVAL '1' DAY)

相关问题