MySQL - 从持续时间减去时间(NOT DateTime)

时间:2015-09-04 08:48:08

标签: mysql date datetime time

规格:我在OSX Yosemite上使用MySQL 5.6和SQLWorkbench,SequelPro

查询背景:我正在尝试为周末和银行假日更正一组TIMESTAMPDIFF个持续时间。我有2个存储过程,它们给我两个日期之间的星期六,星期日和银行假期的数量 - 这些工作正常。为了得到更正的TIMESTAMPDIFF,我因此将星期六,星期日和假日的数量乘以24来得到要减去的小时数,然后从TIMESTAMPDIFF中减去该数字。

示例:例如,如果时间戳A在星期五是14:00,时间戳B在星期二是14:01,则​​原始TIMESTAMPDIFF是96:01:00。假设星期一是假期,周末是48:00:00,我想从96:01:00减去72:00:00,以获得24:01:00的“营业日差异”。

问题:当我执行"96:01:00" - "72:00:00" as date_sub_test之类的操作时,我会得到24。我丢失了所有格式,包括01分钟。持续时间不是DATETIME,因为它们与日历日期不对应,因此我无法使用DATE_ADD / DATE_SUB

问题:我应该如何从持续时间中减去时间,保留格式和相关的基础60系统,例如每小时60分钟,而不是100?

提前致谢!

2 个答案:

答案 0 :(得分:1)

Jaydee中提及comment

  

您是否尝试过TIMEDIFF功能? https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timediff

TIMEDIFF是我一直在寻找的。我还在ABS()中添加了负时差,而MAKETIME()则从整数中创建了一个时间。

答案 1 :(得分:0)

使用SEC_TO_TIMETIME_TO_SEC之类的

SELECT SEC_TO_TIME(TIME_TO_SEC('96:01:00')-TIME_TO_SEC('72:00:00'))

您可以像这样使用ABS

SELECT SEC_TO_TIME(ABS(TIME_TO_SEC('96:01:00')-TIME_TO_SEC('172:00:00')))