Oracle: как я могу выбирать записи ТОЛЬКО со вчерашнего дня?
Я потратил часы на поиск в Интернете ответа на этот вопрос...
Здесь у меня есть:
select *
from order_header oh
where tran_date = sysdate-1
Спасибо заранее.
Ответы
Ответ 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)