如何在MYSQL中将负时间值转换为24小时时间?

时间:2013-09-11 03:43:06

标签: mysql time

我在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格式是"持续时间"而不是实际的"时间",但对于我的生活,我无法弄清楚如何转换为如上所述的实际时钟时间。请帮帮我或杀了我。要么结束我的痛苦。

2 个答案:

答案 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 演示