Oracle,将持续时间行分为一小时

时间:2013-09-16 05:40:19

标签: sql oracle

我正在研究oracle db而且我不太擅长Oracle。 我想把一行分成一小时。

例如,如果时间行如下所示,

Start_time(yyyy / mm / dd hh24:mi:ss)|结束时间(yyyy / mm / dd hh24:mi:ss)

2013/09/01 09:30:00         2013/09/01 11:38:59

我希望看到这样的结果:

2013/09/01 09:30:00         2013/09/01 09:59:59  
2013/09/01 10:00:00         2013/09/01 10:59:59
2013/09/01 11:00:00         2013/09/01 11:38:59

我一直在寻找怎么做,但我找不到一个 但我猜这可以通过使用'CONNECT BY'来完成 任何帮助都会很棒。提前致谢。

2 个答案:

答案 0 :(得分:2)

我已经构建了一个基本查询,你可以解决它并获得你想要的东西。

select greatest(Start_time, trunc(Start_time+(level-1)/24, 'hh24')), 
least(End_time, trunc(Start_time+(level)/24, 'hh24'))
from log_table 
connect by level <= floor((dt1-dt2)*24)+1;

sqlfiddle的例子:

http://sqlfiddle.com/#!4/82625/29

答案 1 :(得分:0)

查询的略微修改版本。先前的查询在某些情况下无效,从日期/时间开始是凌晨2:37,到目前为止是早上6:10。

dimensions.add((String[][]) rs.getArray(1).getArray());