首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle SQL -使用SYSDATE显示

Oracle SQL -使用SYSDATE显示
EN

Stack Overflow用户
提问于 2011-05-06 04:32:03
回答 2查看 3.5K关注 0票数 0

下面是表格:

代码语言:javascript
复制
Col1    Col2    Col3
---------------------------------------
4567    102     5/5/2011 3:37:41 PM
9876    102     5/5/2011 3:37:43 PM
1234    104     5/5/2011 12:46:16 PM
9999    104     5/5/2011 12:47:09 PM
9999    104     5/5/2011 12:47:15 PM

如何使用SYSDATE通过秒'SS‘和/或分钟'MI’在报告上快速显示来仅获取一条或多条记录?我知道在fxn之间,但处理秒数对我来说是一种滑坡路。有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2011-05-06 05:04:11

我不太清楚您的意思,但是如果您想将返回的记录限制在几分钟或几秒钟之前,并且假设COL3已被索引,您可以这样做:

代码语言:javascript
复制
SELECT COL1, COL2, COL3
FROM MY_TABLE
WHERE COL3 > SYSDATE - INTERVAL '3' MINUTE
ORDER BY COL3 DESC;

如果你愿意,INTERVAL可以在几秒内完成;或者两者兼而有之,例如INTERVAL '01:30' MINUTE TO SECOND会倒退90秒,INTERVAL '90' SECOND也一样。(也不确定这是否需要由用户作为参数提供)。

仍然不清楚您想要实现什么,以及您想要使用什么标准来限制返回的行。但是,如果您确实想要最近的记录以及它的特定时间段内的任何记录,您可以这样做:

代码语言:javascript
复制
SELECT COL1, COL2, COL3 FROM (
    SELECT COL1, COL2, COL3,
        NUMTODSINTERVAL(
            FIRST_VALUE(COL3) OVER (ORDER BY COL3 DESC) - COL3,'DAY') AS DIFF
    FROM MY_TABLE
)
WHERE DIFF < INTERVAL '01:30' MINUTE TO SECOND
ORDER BY COL3 DESC;

这将返回最近的记录,再加上90秒内带有COL3的记录。所以总会有至少一条记录返回。但是它没有过滤COL3,它必须评估每一行以计算出偏移量,所以它可能会执行全表或索引扫描。例如,如果您只想要今天的记录,则无论如何都可以过滤内部选择。如果不是,它可能无法满足您的“快速”需求。

一种可能更快,但可能更丑陋的解决方案可能是:

代码语言:javascript
复制
SELECT COL1, COL2, COL3
FROM MY_TABLE
WHERE COL3 > (SELECT MAX(COL3) FROM MY_TABLE) - INTERVAL '01:30' MINUTE TO SECOND
ORDER BY COL3 DESC;

我真的不确定这是你想要的,或者SYSDATE是如何适应的。

票数 3
EN

Stack Overflow用户

发布于 2011-05-06 15:14:04

您可以使用SYSDATE进行计算。负1等于昨天。负1/24是一小时前的事了。负1/(24*60)是一分钟前。负1/(24*60*60)是一秒前。

此查询应显示最近10秒内日期的所有记录:

代码语言:javascript
复制
select *
from my_table
where col3 > sysdate - 10/(24*60*60);

这就是你要找的吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5903714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档