当前位置:首页 > 数据库 > Oracle技术

oracle:sql怎么取出多条时间区间在每隔30分钟拼接好

优良自学吧提供oracle:sql怎么取出多条时间区间在每隔30分钟拼接好,oracle:sql如何取出多条时间区间在每隔30分钟拼接好数据库表示这样的 id begintime endtime sql取出是:1001 2014-07-25 00:00:00 2014-07-25 06:00:00   

oracle:sql如何取出多条时间区间在每隔30分钟拼接好
数据库表示这样的
id begintime endtime
sql取出是:1001 2014-07-25 00:00:00 2014-07-25 06:00:00
                     1001 2014-07-25 09:00:00 2014-07-25 12:30:00
                      1001 2014-07-25 15:00:00 2014-07-25 19:15:00
每隔30分钟拼接好
       00:00-00:30
       00:30-01:00
           .......
      18:30-19:00
       19:00-19:15

怎么写呢,求助
------解决方案--------------------
引用:
数据库表示这样的
id begintime endtime
sql取出是:1001 2014-07-25 00:00:00 2014-07-25 06:00:00
                     1001 2014-07-25 09:00:00 2014-07-25 12:30:00
                      1001 2014-07-25 15:00:00 2014-07-25 19:15:00
每隔30分钟拼接好
       00:00-00:30
       00:30-01:00
           .......
      18:30-19:00
       19:00-19:15

怎么写呢,求助


with t as
 (select 1001 id,
         to_date('20140725 00:00:00', 'yyyymmdd hh24:mi:ss') begintime,
         to_date('20140725 06:00:00', 'yyyymmdd hh24:mi:ss') endtime
    from dual
  union all
  select 1001 id,
         to_date('20140725 09:00:00', 'yyyymmdd hh24:mi:ss') begintime,
         to_date('20140725 12:30:00', 'yyyymmdd hh24:mi:ss') endtime
    from dual
  union all
  select 1001 id,
         to_date('20140725 15:00:00', 'yyyymmdd hh24:mi:ss') begintime,
         to_date('20140725 19:15:00', 'yyyymmdd hh24:mi:ss') endtime
    from dual)
select id,to_char(t1,'yyyymmdd hh24:mi:ss')
------解决方案--------------------
'~'
------解决方案--------------------
to_char(t2,'yyyymmdd hh24:mi:ss')
  from (select id,
               time t1,
               lead(time) over(partition by id, rn order by time) t2
          from (select id, rn, begintime + (level - 1) * 30 / 24 / 60 time
                  from (select t.*, rownum rn from t)
                connect by prior
                            begintime + (level - 1) * 30 / 24 / 60 <= endtime
                       and prior rn = rn
                       and prior dbms_random.value is not null
                union
                select id, rownum, endtime
                  from t))
 where t2 is not null;

(本文来自互联网,不代表搜站(http://www.ylzx8.cn/)的观点和立场)
本站所有内容来自互联网,若本站收录的信息无意侵犯了贵司版权,请给我们来信(ylzx8cn@163.com),我们会及时处理和回复,谢谢