Сравните SQL DATE с NUMBER - PullRequest
       25

Сравните SQL DATE с NUMBER

1 голос
/ 27 апреля 2011

Я работаю со следующим оператором SQL и, похоже, не могу получить правильный синтаксис:

idSelectQuery=Select "numberprgn" 
              from "SMT1"."CM3R1M1" 
              where "category" != 'KM Document' 
          AND ("sysmodtime" - TO_DATE('1970-01-01', 'YYYY-MM-DD')) * 86400000 > ?

Где '?' текущее системное время в виде числа, которое фактически является временем эпохи.

Это утверждение не выполняется из-за:

ORA-00932: несовместимые типы данных: ожидаемое число получено ДАТА

Мне нужно сравнить sysmodtime с? значение времени, хотя я не могу найти способ правильно сделать это ... Я не уверен, могу ли я приводить sysmodtime к char, а затем к number, потому что я знаю, что невозможно привести дату к числу напрямую.

У кого-нибудь есть предложения, чтобы заставить это работать?

Спасибо

1 Ответ

4 голосов
/ 27 апреля 2011

Я подозреваю, что вы хотите

"sysmodtime" > TO_DATE('1970-01-01', 'YYYY-MM-DD') + (?/ 86400000)

Предполагаете, что?представляет количество миллисекунд с 1 января 1970 года. Написание запроса таким образом позволяет использовать индекс для "sysmodtime".

Теперь, на самом деле, вы, вероятно, хотите создать функцию, которая занимает числовое время и преобразует ее в дату, т.е.

CREATE FUNCTION epoch_to_date( p_epoch IN NUMBER )
  RETURN DATE
IS
BEGIN
  RETURN TO_DATE('1970-01-01', 'YYYY-MM-DD') + (p_epoch/ 86400000);
END;

, которую вы можете вызвать в своем запросе

"sysmodtime" > epoch_to_date( ? )
...