问题描述
我尝试使用
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 语句),您只需将其删除即可。