我正在研究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'来完成 任何帮助都会很棒。提前致谢。
答案 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的例子:
答案 1 :(得分:0)
查询的略微修改版本。先前的查询在某些情况下无效,从日期/时间开始是凌晨2:37,到目前为止是早上6:10。
dimensions.add((String[][]) rs.getArray(1).getArray());