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

七夜琉璃 2014-07-25 11:19:20
数据库表示这样的
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

怎么写呢,求助
...全文
264 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CT_LXL 2014-07-25
  • 打赏
  • 举报
回复
引用 楼主 qiyeliuli 的回复:
数据库表示这样的 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;

3,490

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧