Сравнение времени с Oracle - PullRequest
3 голосов
/ 09 марта 2012

Оракул (10g) выполняет здесь надлежащее сравнение ВРЕМЕНИ или мне нужно преобразовать в десятичное время, а затем сравнить? Например.,

IF (SELECT TO_CHAR(sysdate,'HH24:MI:SS') from dual) <= '15:00'
THEN (...)

Спасибо.

Ответы [ 3 ]

10 голосов
/ 09 марта 2012
IF (sysdate <= trunc(sysdate)+15/24)
THEN (...)

должен сделать трюк ...

4 голосов
/ 09 марта 2012

Вы не можете сделать select в операторе if, но вы можете сделать прямое сравнение с sysdate.Если вы делаете это так, вероятно, было бы лучше использовать число, а не полагаться на неявное преобразование.Вам также не нужны дополнительные минуты и т. Д. Что-то вроде

begin

   if to_number(to_char(sysdate,'HH24')) <= 15 then
      -- do something
   end if;

end;

Если вы действительно хотите использовать минуты, то, преобразовав их в строку без двоеточия, вы можете сделать более прямое сравнение.До тех пор, пока дата / время конвертируются в 24-часовой формат без дополнительных данных и в обратном порядке, сравнение года, месяца, дня, часа и т. Д. Всегда будет точным, например,

begin

   if to_char(sysdate,'HH24MI') <= '1515' then
      -- do something
   end if;

end;

Однако часто это лучше делатьСравнение дат, как @cagcowboy только что опубликовал, прежде чем я туда попал!

1 голос
/ 23 мая 2013

используйте следующий код

SELECT TO_CHAR(SYSDATE, 'HH24MI') INTO V_SYS_TIME FROM DUAL;

IF V_SYS_TIME BETWEEN V1_TIME AND V2_TIME THEN 
(....)
...