Oracle получить записи предыдущего дня - PullRequest
12 голосов
/ 31 марта 2010

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

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

Ответы [ 5 ]

27 голосов
/ 31 марта 2010

как насчет sysdate?

SELECT field,datetime_field 
FROM database
WHERE datetime_field > (sysdate-1)
5 голосов
/ 30 марта 2011

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

это

    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')
2 голосов
/ 31 марта 2010
SELECT field,datetime_field 
FROM database
WHERE datetime_field > (CURRENT_DATE - 1)

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

0 голосов
/ 01 ноября 2016

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

выберите (sysdate-1) PREVIOUS_DATE из двойного;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...