use*_*168 0 sql oracle datetime timestamp sysdate
我目前正在使用其中一列来提取时间的每分钟,但是,由于该分钟未插入任何数据,因此会跳过几分钟。
输出低于预期。
12-19-2017 02:23:00
12-19-2017 02:24:00
12-19-2017 02:25:00
12-19-2017 02:26:00
12-19-2017 02:27:00
12-19-2017 02:28:00
12-19-2017 02:29:00
12-19-2017 02:30:00
12-19-2017 02:31:00
12-19-2017 02:32:00
12-19-2017 02:33:00
12-19-2017 02:34:00
Run Code Online (Sandbox Code Playgroud)
我得到什么。(当前时间为13:11
12-19-2017 13:11:00
12-19-2017 13:11:00
12-19-2017 13:11:00
12-19-2017 13:11:00
12-19-2017 13:11:00
12-19-2017 13:11:00
12-19-2017 13:11:00
12-19-2017 13:11:00
12-19-2017 13:11:00
12-19-2017 13:11:00
12-19-2017 13:11:00
12-19-2017 13:11:00
Run Code Online (Sandbox Code Playgroud)
询问
SELECT TRUNC(SYSDATE,'MI') AS TIME_STAMP From Table where SYSDATE >= sysdate - 1;
Run Code Online (Sandbox Code Playgroud)
如果我的开始时间是从昨天的午夜到现在,那么我想查看每分钟的输出。
如果要基于sysdate生成一系列值,则可以对dual表使用分层查询,而不必引用实际表:
select trunc(sysdate - 1) + (level - 1)/1440 as result
from dual
connect by level <= (sysdate - trunc(sysdate - 1))*1440
order by result;
RESULT
-------------------
2017-12-18 00:00:00
2017-12-18 00:01:00
2017-12-18 00:02:00
2017-12-18 00:03:00
...
2017-12-18 23:57:00
2017-12-18 23:58:00
2017-12-18 23:59:00
2017-12-19 00:00:00
2017-12-19 00:01:00
2017-12-19 00:02:00
2017-12-19 00:03:00
...
2017-12-19 14:21:00
2017-12-19 14:22:00
2017-12-19 14:23:00
Run Code Online (Sandbox Code Playgroud)
这trunc(sysdate - 1)以昨天的午夜为起点;计算从现在到现在的分钟数为(sysdate - trunc(sysdate - 1))*1440); 并使用connect-by语法将开始时间增加一分钟,直到达到该限制。
(这取决于(但不包括)当前的分钟。如果您也希望这样做,只需在终止条件的末尾加1。)
根据您最终想要获得的结果,可以将其用作CTE或内联视图以生成所有这些分钟,然后左键连接到实际表以查找匹配的数据(如果存在)。
如果希望用户提供开始时间和结束时间,则可以将它们作为变量传递,例如:
select trunc(:start_time, 'MI') + (level - 1)/1440 as result
from dual
connect by level <= (:end_time - :start_time)*1440
order by result;
Run Code Online (Sandbox Code Playgroud)
此处:start_time和:end_time此处是您用开始和结束时间填充的绑定变量。确切的机制取决于从用户到查询值的获取方式。在SQL * Plus或SQL Developer工作表中,您需要将它们作为字符串获取,并将这些字符串添加(显式)转换为日期。在Java应用程序中,您可以直接绑定日期数据类型。