MySQL - 从持续时间中减去时间(不是日期时间)

MySQL - Subtracting time from a duration (NOT DateTime)

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

上的 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 的 'business day difference'。

问题: 当我做类似 "96:01:00" - "72:00:00" as date_sub_test 的事情时,我得到 24。我丢失了所有格式,包括 01 分钟。持续时间不是 DATETIME,因为它们与日历日期不对应,所以我不能使用 DATE_ADD / DATE_SUB

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

提前致谢!

一样使用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')))

作为Jaydee mentions in a

Have you tried the TIMEDIFF function? https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timediff

TIMEDIFF 正是我要找的。我还添加了 ABS() 以使负时间差为正,并添加了 MAKETIME() 以从整数创建时间。