1

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

有人有什么建议可以让它工作吗?

谢谢

4

1 回答 1

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( ? )
于 2011-04-27T19:28:22.963 回答