我在TIME类型的表中有一列。我想得到一个结果,该结果应用一个时间偏移,导致该班次的24小时时钟表示。要添加班次,我的查询包含...
select addtime(boo,'01:00:00') as yada
但是从24小时范围内取出的任何值都会在24小时范围之外结束,例如......
23:45结束时间为24:45(当我想要00:45:00时)
如果我走另一条路并从小于凌晨1点的值减去小时,我得到......
00:15结束时-00:45:00我想要的时间(23:15:00)
现在,我知道MYSQL中的TIME格式是"持续时间"而不是实际的"时间",但对于我的生活,我无法弄清楚如何转换为如上所述的实际时钟时间。请帮帮我或杀了我。要么结束我的痛苦。
答案 0 :(得分:2)
一个简单的解决方案是仅使用DATETIME
数据类型,然后忽略日期部分。如果您没有处理大量数据,或者按实际时间搜索,我就看不到问题。
作为奖励,您可以使用+ INTERVAL 1 HOUR
等操作数据。
提取时只需使用TIME(boo)
如您所知,MySQL TIME
类型不限于24小时,因此这可能是您最接近的...我相信您可以使用MOD()
构建查询等,但它可能不值得。
答案 1 :(得分:1)
一种可能的解决方案是将boo
TIME值添加到任何日期(例如今天),然后添加您的时间差值,之后只返回时间部分TIME()
SELECT TIME(CURDATE()
+ INTERVAL TIME_TO_SEC('23:45:00') SECOND
+ INTERVAL 1 HOUR) new_time
输出:
+----------+ | new_time | +----------+ | 00:45:00 | +----------+
这是 SQLFiddle 演示