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

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

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

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

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

5 ответов


Как насчет sysdate?

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

вы можете удалить часть времени даты с помощью 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

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

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


этой

    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')

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

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