将 SQL DATE 与 NUMBER 进行比较

发布于 2024-11-03 16:46:42 字数 554 浏览 2 评论 0原文

我正在使用以下 SQL 语句,但似乎无法获得正确的语法:

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

Where the '?'是当前系统时间的数字 - 这实际上是纪元时间。

该语句失败的原因是:

ORA-00932: 数据类型不一致: 预期 NUMBER 已获得 DATE

我需要能够将 sysmodtime 与 ?时间值,虽然我无法找到正确执行此操作的方法...我不确定是否可以将 sysmodtime 转换为 char 然后转换为数字,因为我知道不可能直接将日期转换为数字。

有人有任何建议让它发挥作用吗?

谢谢

I am working with the following SQL statement and can't seem to get the syntax correct:

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

Where the '?' is the current system time as a number - which is actually epoch time.

This statement fails because of:

ORA-00932: inconsistent datatypes: expected NUMBER got DATE

I need to be able to compare the sysmodtime to the ? time value, although I can't figure out a way to properly do this... I'm not sure if i can cast sysmodtime to char then to number, because I know its not possible to cast date to number directly.

Anyone have any suggestions to get this to work?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

决绝 2024-11-10 16:46:42

我怀疑你想要

"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( ? )

I suspect you want

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

Assuming that ? represents the number of milliseconds since Jan 1, 1970. Writing the query this way makes it possible to use an index on "sysmodtime".

Now, realistically, you probably want to create a function that takes a numeric time and converts it to a date, i.e.

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;

that you can call in your query

"sysmodtime" > epoch_to_date( ? )
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文