Ответ 1
как насчет sysdate?
SELECT field,datetime_field
FROM database
WHERE datetime_field > (sysdate-1)
Хорошо, я думаю, что я получаю предыдущий год вместо предыдущего дня, но мне нужен предыдущий день.
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
как насчет 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. Но, я думаю, это должно сработать.
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')
Я думаю, вы также можете выполнить эту команду:
выберите (sysdate-1) PREVIOUS_DATE из dual;