ORA-00920: недопустимый реляционный оператор в предложении where

#sql #oracle

#sql #Oracle

Вопрос:

Я получаю ORA-00920: invalid relational operator сообщение об ошибке при переходе к моему предложению where.

 and (round(to_number(c.rest_time - a.TIME_STAMP) * 24 * 60 )) >  5
  

Полное предложение Where

 From TableA a,TableB b
    where round(to_number(a.rest_time - a.time_stamp) * 24 * 60 )) >  5
    and a.time_stamp > '05-12-2014 22:00:00'
    and a.rest_time < '05-14-2014 14:00:00'
    and a.dev = 'CUSTOMER'
    and b.xid = a.xid
    and b.accno = a.accno 
    and b.name is not null 
    and b.dis is null 
  

Комментарии:

1. Можете ли вы опубликовать полное WHERE предложение?

2. И типы данных столбцов

3. Нужно ли добавлять TO_DATE в поля a.time_stamp и a.rest_time?

4. Дело в том, что у меня то же условие, что и в другом, но похожем запросе, и оно не выдает ошибку..

5. a.time_stamp > ’05-12-2014 22:00:00′ Разве это не сравнение числа со строкой?

Ответ №1:

У вас есть лишняя правая скобка . Это должно быть ... where round(to_number(a.rest_time - a.time_stamp) * 24 * 60 ) > 5 ...

Например,

 -- your case (throws  invalid relational operator ):
select 1 from dual where  round(to_number(sysdate- sysdate) * 24 * 60 )) >  5 ;

--corrected :
select 1 from dual where  round(to_number(sysdate- sysdate) * 24 * 60 ) >  5 ;
  

Комментарии:

1. лол, я чувствую себя плохо, даже публикуя этот вопрос. Это была дополнительная скобка, когда я скопировал это условие из моего другого запроса. Вероятно, я пропустил копирование ( . Еще раз спасибо.