我目前正在使用其中一个列来提取每一分钟的时间,但是,它会跳过几分钟,因为那一分钟没有插入数据。
输出低于预期。
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
我得到了什么。(当前时间是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
查询
SELECT TRUNC(SYSDATE,'MI') AS TIME_STAMP From Table where SYSDATE >= sysdate - 1;
答案 0 :(得分:4)
如果我的开始时间是从昨天午夜到现在,那么我希望看到每分钟的输出。
如果要基于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
这使用trunc(sysdate - 1)
以昨天的午夜为起点;计算当时和现在之间的分钟数(sysdate - trunc(sysdate - 1))*1440)
;并使用连接语法将一分钟添加到开始时间,直到达到该限制。
(这取决于当前分钟,但不包括当前分钟。如果你想要那样,只需在终止条件的末尾添加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;
其中:start_time
和:end_time
这里是使用开始和结束时间填充的绑定变量。确切的机制取决于值从用户到查询的方式;在SQL * Plus或SQL Developer工作表中,您需要将它们作为字符串并将这些字符串的(显式)转换添加到日期。从Java应用程序说,您可以直接绑定日期数据类型。
答案 1 :(得分:2)
问题是:你总是从你的表中为今天的所有行选择相同的时间(sysdate)
SELECT trunc(sysdate,'mi') as time_stamp
FROM myTable
WHERE sysdate >= sysdate - 1;
尝试将查询重写为:
SELECT to_char(date1,'mm-dd-yyyy hh:mi:ss') as time_stamp
FROM myTable
WHERE sysdate >= sysdate - 1;
-- assuming you have a date column named DATE1 in your table, and populated every minute.
(比较小时02
和13
,我决定使用hh
而不是hh24
格式化