我想写一个存储过程来实现下面的需求:
一个时间字段是跨小时的,现在要按照小时截取出来。
废话不多,举例说明:
表ta字段:ID,StartTime,StopTime
1,2011-05-05 07:12:00,2011-05-05 10:35:00我要把上面的数据按小时拆分成四条:
1,2011-05-05 07:12:00,2011-05-05 08:00:00
1,2011-05-05 08:00:00,2011-05-05 09:00:00
1,2011-05-05 09:00:00,2011-05-05 10:00:00
1,2011-05-05 10:00:00,2011-05-05 10:35:00谢谢大家!

解决方案 »

  1.   

    lsb1:从1-24,字段ID,类型自增
    SELECT *,
    IF(b.id<=HOUR(a.StartTime) OR (b.id>HOUR(a.StartTime) AND b.id<HOUR(a.StopTime)),
    CAST(CONCAT(DATE(a.StartTime),' ',b.id+1,':00:00') AS DATETIME),
    IF(b.id=HOUR(a.StopTime),(a.StopTime),CAST(CONCAT(DATE(a.StartTime),' ',b.id,':00:00') AS DATETIME))) AS newstop,IF(b.id<=HOUR(a.StartTime),a.StartTime,IF(b.id>HOUR(a.StartTime) AND b.id<HOUR(a.StopTime),
    CAST(CONCAT(DATE(a.StartTime),' ',b.id,':00:00') AS DATETIME),
    IF(b.id=HOUR(a.StopTime),CAST(CONCAT(DATE(a.StartTime),' ',b.id,':00:00') AS DATETIME),b.id))) AS newstart
     
     FROM ttf a LEFT JOIN zz.lsb1 b ON b.id BETWEEN HOUR(a.StartTime) AND HOUR(a.StopTime)
      

  2.   

    用 left 和 right  或者substr 等函数,但是在服务端效率应该不如应用端