Подтвердить что ты не робот

Oracle: как я могу выбирать записи ТОЛЬКО со вчерашнего дня?

Я потратил часы на поиск в Интернете ответа на этот вопрос...

Здесь у меня есть:

select  *
from    order_header oh
where   tran_date = sysdate-1

Спасибо заранее.

4b9b3361

Ответ 1

Использование:

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

Ссылка: TRUNC

Вызов функции в tran_date означает, что оптимизатор не сможет использовать связанный с ним индекс (при условии, что он существует). Некоторые базы данных, такие как Oracle, поддерживают индексы на основе функций, которые позволяют выполнять функции по данным, чтобы минимизировать воздействие в таких ситуациях, но администраторы баз данных IME этого не позволят. И я согласен - в этом случае они не нужны.

Ответ 2

trunc(tran_date) = trunc(sysdate -1)

Ответ 3

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

Ответ 4

Если вы не поддерживаете будущие транзакции, то что-то вроде этого может работать:

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

Ответ 5

Этот комментарий для читателей, которые нашли эту запись, но используют 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)