Reputation: 1369
I've spent hours searching the web for an answer to this question...
Here's what I currently have:
select *
from order_header oh
where tran_date = sysdate-1
Upvotes: 42
Views: 211905
Reputation: 1359
If you want the timestamp for yesterday try something like:
(CURRENT_TIMESTAMP - INTERVAL '1' DAY)
Upvotes: 0
Reputation: 11
This comment is for readers who have found this entry but are using mysql instead of oracle! on mysql you can do the following: Today
SELECT *
FROM
WHERE date(tran_date) = CURRENT_DATE()
Yesterday
SELECT *
FROM yourtable
WHERE date(tran_date) = DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)
Upvotes: 1
Reputation: 181280
to_char(tran_date, 'yyyy-mm-dd') = to_char(sysdate-1, 'yyyy-mm-dd')
Upvotes: 3
Reputation: 332541
Use:
AND oh.tran_date BETWEEN TRUNC(SYSDATE - 1) AND TRUNC(SYSDATE) - 1/86400
Reference: TRUNC
Calling a function on the tran_date
means the optimizer won't be able to use an index (assuming one exists) associated with it. Some databases, such as Oracle, support function based indexes which allow for performing functions on the data to minimize impact in such situations, but IME DBAs won't allow these. And I agree - they aren't really necessary in this instance.
Upvotes: 77
Reputation: 23263
If you don't support future dated transactions then something like this might work:
AND oh.tran_date >= trunc(sysdate-1)
Upvotes: 2