详细情况是这样的,一条数据,比如一条车辆运行记录,有到达时间2006-1-1 12:00,发车时间2006-1-13 13:00字段。由于跨了好几天
想select分别求出每天车辆的停留时间,每天18点开始做截取。怎么得到如下记录集?
原记录
车号      到达时间          发车时间
12345     2006-1-1 12:00    2006-1-13 13:00想得到如下记录
车号:    开始时间:        停止时间
12345     2006-1-1 12:00    2006-1-1 18:00
12345     2006-1-1 18:00    2006-1-2 18:00
....
12345     2006-1-12 18:00    2006-1-13 13:00

解决方案 »

  1.   

    可以用一条SQL语句,
    这里的关键是得到一个天数序列。
    好好想想,
    :)
      

  2.   

    select case when rownum = 1 then &begindate + (rownum-1) 
           else trunc(&begindate) + (rownum-2) + 0.75
           end ,
           case when rownum =(trunc(&enddate + 0.25)-trunc(&begindate + 0.25))+1 then &enddate
           else trunc(&begindate) + (rownum-1) + 0.75
           end 
    from dual connect by rownum <= (trunc(&enddate + 0.25)-trunc(&begindate + 0.25))+11 2006-8-15 7:12:00 2006-8-15 18:00:00
    2 2006-8-15 18:00:00 2006-8-16 18:00:00
    3 2006-8-16 18:00:00 2006-8-17 18:00:00
    4 2006-8-17 18:00:00 2006-8-18 18:00:00
    5 2006-8-18 18:00:00 2006-8-19 18:00:00
    6 2006-8-19 18:00:00 2006-8-20 18:00:00
    7 2006-8-20 18:00:00 2006-8-20 22:48:00