0

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

4

2 回答 2

2

一个简单的解决方案是只使用DATETIME数据类型,然后忽略日期部分。如果您不处理大量数据,或者按实际时间搜索我看不到问题。

作为奖励,您将能够使用诸如此类的东西来操作数据+ INTERVAL 1 HOUR

提取时只需使用TIME(boo)

如您所知,MySQLTIME类型不限于 24 小时时间,因此这可能是您将获得的最接近的时间......我相信您可以使用MOD()etc 构建查询,但它可能不值得。

于 2013-09-11T04:04:05.147 回答
1

一个可能的解决方案是将您的booTIME 值添加到任何日期(例如今天),然后添加您的时间增量,然后返回时间部分TIME()

SELECT TIME(CURDATE() 
             + INTERVAL TIME_TO_SEC('23:45:00') SECOND 
             + INTERVAL 1 HOUR) new_time

输出:

+----------+
| 新时间 |
+----------+
| 00:45:00 |
+----------+

这是SQLFiddle演示

于 2013-09-11T04:09:07.250 回答