2013-07-26 3 views
2

Я хочу сказать следующее, но вместо даты SYSDATE, но время между тем, что я хочу настроить. Каким будет синтаксис?SYSDATE, но укажите время

, где mydatefield между SYSDATE+'0001' и SYSDATE+'2359'

... 
WHERE TO_CHAR(MOPACTIVITY.MOPNOTIFICATIONSENDAT , 'yyyy-mm-dd hh24:mi') 
    BETWEEN '2013-07-26 00:00:01' AND '2013-07-26 23:59:59' 
; 

ответ

5

SYSDATE (или любой другой столбец дата) в Oracle имеет компонент времени. Поэтому вам нужно снять это, а затем добавить часы/минуты/время.

Например. сказать текущий день с 10:00 до 3:00 вечера, вы можете сказать,

date_column between (trunc(sysdate) + 10/24) and (trunc(sysdate) + 15/24) 

дата Oracle арифметика работает на уровне дня. так что +1 даст вам следующий день, 1/24 даст вам час и 10/24 даст вам 10:00 утра в текущий день.

SQL> alter session set nls_date_format = 'DD-Mon-YYYY HH:MI:SS AM'; 

Session altered. 

    1 select sysdate, 
    2   trunc(sysdate), 
    3   trunc(sysdate) + 10/24, 
    4   trunc(sysdate) + 15/24 
    5* from dual 
SQL>/

SYSDATE     26-Jul-2013 06:26:07 PM 
TRUNC(SYSDATE)   26-Jul-2013 12:00:00 AM 
TRUNC(SYSDATE)+10/24  26-Jul-2013 10:00:00 AM 
TRUNC(SYSDATE)+15/24  26-Jul-2013 03:00:00 PM 

Для вашего вопроса, вы, кажется, заинтересованы между текущим днем ​​и на следующий день, так что вы можете попробовать добавить + 1 на дату непосредственно после того, как вы удалите компонент времени.

date_column >= trunc(sysdate) and 
date_column < trunc(sysdate)+1 
1

Лучший способ сделать это, чтобы оставить ваш MOPACTIVITY.MOPNOTIFICATIONSENDAT в виде DATE типа. Это позволяет Oracle оптимизировать запрос, если в столбце есть индекс. Я бы рекомендовал что-то вроде этого:

WHERE MOPACTIVITY.MOPNOTIFICATIONSENDAT >= TRUNC(SYSDATE) 
    AND MOPACTIVITY.MOPNOTIFICATIONSENDAT < TRUNC(SYSDATE) + 1 

Это сводится к «больше или равно сегодня в полночь» и «меньше, чем завтра в полночь».

0

Мы можем также Trunc как даты, а затем сравнить результат

where TRUNC(MOPACTIVITY.MOPNOTIFICATIONSENDAT) = TRUNC(SYSDATE) 

TRUNC Удаляет метку времени от даты

Смежные вопросы