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