Oracle получает записи за предыдущий день

Хорошо, я думаю, что я получаю предыдущий год вместо предыдущего дня, но мне нужен предыдущий день.

SELECT TO_DATE(TO_CHAR(CURRENT_DATE, 'YYYY-MM-DD'),'YYYY-MM-DD') - 1 FROM Dual

Я сравниваю его со штампом даты и времени в этом формате и хочу получить все строки с предыдущего дня.

YYYY-MM-DD HH:MM:SS

Итак, я пытаюсь что-то вроде этого

SELECT field,datetime_field 
FROM database
WHERE datetime_field > TO_DATE(TO_CHAR(CURRENT_DATE, 'YYYY-MM-DD'),'YYYY-MM-DD') - 1

Ответ 1

как насчет sysdate?

SELECT field,datetime_field 
FROM database
WHERE datetime_field > (sysdate-1)

Ответ 2

Вы можете удалить временную часть даты с помощью TRUNC.

select field,datetime_field 
  from database
 where datetime_field >= trunc(sysdate-1,'DD');

Этот запрос даст вам все строки с датами, начинающимися со вчерашнего дня. Обратите внимание на второй аргумент trunc(). Вы можете использовать это, чтобы урезать любую часть даты.

Если ваше datetime_fied содержит '2011-05-04 08:23:54', будет возвращена следующая дата

trunc(datetime_field, 'HH24') => 2011-05-04 08:00:00
trunc(datetime_field, 'DD')   => 2011-05-04 00:00:00
trunc(datetime_field, 'MM')   => 2011-05-01 00:00:00
trunc(datetime_field, 'YYYY') => 2011-00-01 00:00:00

Ответ 3

SELECT field,datetime_field 
FROM database
WHERE datetime_field > (CURRENT_DATE - 1)

В свое время я работал над Oracle. Но, я думаю, это должно сработать.

Ответ 4

this

    SELECT field,datetime_field 
FROM database
WHERE datetime_field > (sysdate-1)

будет работать. Возникает вопрос: есть ли 'datetime_field' тот же формат, что и sysdate? Мой способ справиться с этим: использовать функцию "to_char()" (работает только в Oracle).

Образцы: предыдущий день:

select your_column
from your_table
where to_char(sysdate-1, 'dd.mm.yyyy')

или

select extract(day from date_field)||'/'|| 
       extract(month from date_field)||'/'||
       extract(year from date_field)||'/'||
as mydate
from dual(or a_table)
where extract(day from date_field) = an_int_number and
      extract(month from date_field) = an_int_number and so on..

дата сравнения:

select your_column
from your_table
where
to_char(a_datetime_column, 'dd.mm.yyyy') > or < or >= or <= to_char(sysdate, 'dd.mm.yyyy')

диапазон времени между вчера и позавчера:

select your_column
from your_table
where
to_char(a_datetime_column, 'dd.mm.yyyy') > or < or >= or <= to_char(sysdate-1, 'dd.mm.yyyy') and
to_char(a_datetime_column, 'dd.mm.yyyy') > or < or >= or <= to_char(sysdate-2, 'dd.mm.yyyy')

другой диапазон времени

select your_column
from your_table
where 
to_char(a_datetime_column, 'dd.mm.yyyy') is between to_char(sysdate-1, 'dd.mm.yyyy') 
and to_char(sysdate-2, 'dd.mm.yyyy')

Ответ 5

Я думаю, вы также можете выполнить эту команду:

выберите (sysdate-1) PREVIOUS_DATE из dual;