Oracle SQL 中 2 个时间戳之间的差异

问题描述

请帮忙找出 sql 中 2 个时间戳之间的差异

我尝试使用

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

我收到“ORA-00911:无效字符”错误

解决方法

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

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

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

结果是 1(分钟)

然后就是简单的检查

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

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

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

输出区间:

差异
+02 00:00:00.000000

但是,您的代码可以运行db<>fiddle

你可能会发现错误:

ORA-00911:无效字符

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