Сравните SQL DATE с NUMBER
Я работаю со следующим оператором 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 к char, а затем к number, потому что я знаю, что невозможно привести дату к числу напрямую.
У кого-нибудь есть предложения, чтобы заставить это работать?
Спасибо
1 ответ
Я подозреваю, что вы хотите
"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( ? )