【问题标题】:Difference between 2 timestamps in Oracle SQLOracle SQL 中两个时间戳的区别
【发布时间】:2021-09-01 21:25:29
【问题描述】:

请帮助找出 SQL 中 2 个时间戳之间的差异

我尝试过使用

Select (cast(sysdate as timestamp) - cast(sysdate-2 as timestamp)) diff from dual;

我收到“ORA-00911:invalid character”错误

【问题讨论】:

  • 对我来说,您的查询有效。但是为什么不简单地SYSTIMESTAMP - SYSTIMESTAMP - interval '2' day

标签: sql oracle sql-timestamp


【解决方案1】:

如果你想要一些看起来更简单的东西,试试这个来查找过去 1 分钟内发生的表中的事件:

使用此条目,您可以摆弄十进制值,直到获得所需的分钟值。就 sysdate 有效数字而言,值 .0007 恰好是 1 分钟。您可以使用它的倍数来获得您想要的任何其他值:

select (sysdate - (sysdate - .0007)) * 1440 from dual;

结果为 1(分钟)

那么检查就很简单了

select * from my_table where (sysdate - transdate) < .00071;

【讨论】:

    【解决方案2】:

    您没有发现两个时间戳之间的差异;您正在寻找两个日期之间的差异并将它们转换为过程中的时间戳。这是不必要的,您可以将它们保留为日期值并将差异显式转换为 INTERVAL DAY TO SECOND 数据类型(如果您使用时间戳,这将是输出):

    SELECT (SYSDATE - (SYSDATE - 2)) DAY TO SECOND AS diff
    FROM   DUAL;
    

    哪个输出区间:

    DIFF
    +02 00:00:00.000000

    但是,您的代码可以工作db<>fiddle

    你可能会发现错误:

    ORA-00911:无效字符

    与您的查询无关,与末尾的; 语句终止符有关。如果您通过第 3 方应用程序(即 C#、Java、Python 等)运行查询,那么它们会将单个语句传递给数据库以执行,在这种情况下,使用语句终止符是无效的语法(因为那里只会是一条 SQL 语句),您只需将其删除即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-18
      • 2023-02-14
      • 1970-01-01
      • 2018-12-28
      • 2017-07-10
      相关资源
      最近更新 更多