我需要一个oracle查询,它在给定两个时间戳之间每分钟返回一次。我提到了this堆栈溢出问题。 我们可以改进相同的查询吗?Oracle查询在两个时间戳之间每分钟获取一次
1
A
回答
1
要使用Row Generator技术得到所有两个日期时间元素之间的分钟数,你需要在日期之间的差值转换成分钟数。在CONNECT BY子句中,其余部分保持不变。
例如,让所有的分11/09/2015 11:00:00
和11/09/2015 11:15:00
之间:
SQL> WITH DATA AS
2 (SELECT to_date('11/09/2015 11:00:00', 'DD/MM/YYYY HH24:MI:SS') date_start,
3 to_date('11/09/2015 11:15:00', 'DD/MM/YYYY HH24:MI:SS') date_end
4 FROM dual
5 )
6 SELECT TO_CHAR(date_start+(LEVEL -1)/(24*60), 'DD/MM/YYYY HH24:MI:SS') the_date
7 FROM DATA
8 CONNECT BY level <= (date_end - date_start)*(24*60) +1
9/
THE_DATE
-------------------
11/09/2015 11:00:00
11/09/2015 11:01:00
11/09/2015 11:02:00
11/09/2015 11:03:00
11/09/2015 11:04:00
11/09/2015 11:05:00
11/09/2015 11:06:00
11/09/2015 11:07:00
11/09/2015 11:08:00
11/09/2015 11:09:00
11/09/2015 11:10:00
11/09/2015 11:11:00
11/09/2015 11:12:00
11/09/2015 11:13:00
11/09/2015 11:14:00
11/09/2015 11:15:00
16 rows selected.
以上,CONNECT BY level <= (date_end - date_start)*(24*60) +1
意味着我们正在生成行多达数(date_end - date_start)*(24*60) +1
。您获得16
行,因为它包括开始和分钟的结束窗口。
+0
感谢您的回答。其他答案也是正确的,但我更喜欢这一个。 – thanuja
+0
@thanuja不客气! –
1
如果你希望所有分钟SYSDATE至11月15日,您可以创建这样的:
SELECT to_char(TRUNC(sysdate) + numtodsinterval(level - 1, 'minute'),
'dd.mm.yyyy hh24:mi') min
FROM dual
CONNECT BY LEVEL <=
(trunc((TO_DATE('16-NOV-2015','dd-mon-yyyy')) - sysdate) * 24 * 60);
1
你也可以使用下面,给代替SYSTIMESTAMP和SYSTIMESTAMP + 1
select (systimestamp)+level/(24*60) as Rang_values
from
dual
connect by level
<=
(
select extract(minute from diff)+
extract(day from diff)*24*60 +
extract(hour from diff)*60 as diff
from
(
select systimestamp+1-systimestamp diff from dual
)
)
相关问题
- 1. 在两次特定时间之间每5分钟减去一次数据
- 2. 如何获取两次查询之间的时间间隔?
- 3. SQL - 两个时间戳之间的分钟总和
- 4. 如何检查当前时间是否在oracle的两个时间戳之间
- 5. 时间戳。两次之间的差异
- 6. 两个小时之间的Rails查询时间戳
- 7. 查询在两个日期和时间之间获取记录
- 8. 每天两次之间的SQL查询
- 9. 2个大查询时间戳字段之间的分钟差异
- 10. 如何在两个时间戳之间获取对象
- 11. 在两个时间戳之间获取记录MySql
- 12. 比较两个时间戳每分钟的差异?
- 13. 查找速度大于每分钟1次的时间戳有间隙
- 14. 在oracle中的两个时间戳之间搜索数据
- 15. SQL查询两个时间戳之间的最大值
- 16. 查询之间的两个时间戳记日期
- 17. 查询中两个时间戳之间的比较
- 18. 时间片每天两个时间戳
- 19. SQL选择时间戳列在两个时间戳之间
- 20. 检查给定的时间是否在两次(小时,分钟)格式之间
- 21. Oracle - 在两次之间每小时插入一行
- 22. MySQL:如何在几秒钟内获得两个时间戳之间的差异
- 23. Laravel:在diffForHumans格式(Carbon)中获取两个时间戳之间的时间
- 24. SQL查询在几分钟和几天之间获取数据
- 25. db2之间的时间戳查询
- 26. 查询之间的mysql时间戳
- 27. 检查时间在两次之间
- 28. 现在在哪里3分钟前之间的时间戳列
- 29. 想要在两个不同的时区与joda之间获得两个ISO 8601时间之间的分钟
- 30. 如何找出两个时间戳之间的天数和分钟
我希望有一个永久[数字表(http://web.archive.org/web/你的价值观20150411042510/HTTP://sqlserver2000.databases.aspfaq.com/why-should-i-consider-using-an-auxiliary-numbers-table.html)。本文基于SQL Server,但概念在任何DBMS中都是相同的。 –
@VladimirBaranov不,你不需要这样的需求的静态表。你只需要有开始和结束的日期时间,其余的是一个简单的分层查询生成所需的行,通常称为[**行生成器**](http://lalitkumarb.com/2015/04/15/生成最新的月名周数天数间两日,在Oracle的SQL /)。 –
@LalitKumarB,我不是说你需要**一张永久性的桌子。正如您所示,您可以即时生成它,或者您可以将它放在磁盘上。我更喜欢把它放在磁盘上。它在很多情况下都很有用。 –