我花了几个小时在网上搜索这个问题的答案......
以下是我目前的情况:
select *
from order_header oh
where tran_date = sysdate-1
提前致谢。
答案 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)