将SQL DATE与NUMBER进行比较

时间:2011-04-27 18:54:50

标签: sql oracle ora-00932

我正在使用以下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然后编号,因为我知道它不可能直接将日期转换为数字。

任何人都有任何建议让这个工作?

由于

1 个答案:

答案 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( ? )