我正在使用以下SQL语句,似乎无法使语法正确:
idSelectQuery=Select "numberprgn"
from "SMT1"."CM3R1M1"
where "category" != 'KM Document'
AND ("sysmodtime" - TO_DATE('1970-01-01', 'YYYY-MM-DD')) * 86400000 > ?
哪里'?'是当前系统时间的数字 - 实际上是纪元时间。
此声明因以下原因失败:
ORA-00932:数据类型不一致:预期NUMBER为DATE
我需要能够将sysmodtime与?进行比较?时间值,虽然我无法找到一种方法来正确地执行此操作...我不确定我是否可以将sysmodtime转换为char然后编号,因为我知道它不可能直接将日期转换为数字。
任何人都有任何建议让这个工作?
由于
答案 0 :(得分:4)
我怀疑你想要
"sysmodtime" > TO_DATE('1970-01-01', 'YYYY-MM-DD') + (?/ 86400000)
假设?表示自1970年1月1日以来的毫秒数。以这种方式编写查询可以在“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( ? )