求按小时拆分时间段的sql语句

fihuang 2011-05-06 11:02:28
我想写一个存储过程来实现下面的需求:
一个时间字段是跨小时的,现在要按照小时截取出来。
废话不多,举例说明:
表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

谢谢大家!
...全文
944 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
WWWWA 2011-05-06
  • 打赏
  • 举报
回复
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)
回南山种豆 2011-05-06
  • 打赏
  • 举报
回复
用 left 和 right 或者substr 等函数,但是在服务端效率应该不如应用端
ACMAIN_CHM 2011-05-06
  • 打赏
  • 举报
回复
用存储过程或者辅助序列表。

建议类似的功能还是直接在程序中实现。数据库中实现的效果并不好。

56,679

社区成员

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

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