如何在DB2中实现类似MySQL TIMEDIFF的hh:mm:ss格式时间差查询
在DB2中实现和MySQL TIMEDIFF相同的效果
我明白你现在的问题——MySQL里用TIMEDIFF能轻松算出两个时间的间隔并返回HH:MM:SS格式(哪怕小时数超过24),但DB2里没有这个函数对吧?别担心,我们可以通过组合几个DB2自带的函数来实现完全一样的效果,下面是对应的查询语句:
SELECT REQ_NO, Req_CloseDate, Req_WorkStartDate, CONCAT( FLOOR(TIMESTAMPDIFF(SECOND, Req_WorkStartDate, Req_CloseDate)/3600), ':', LPAD(FLOOR(MOD(TIMESTAMPDIFF(SECOND, Req_WorkStartDate, Req_CloseDate), 3600)/60), 2, '0'), ':', LPAD(MOD(TIMESTAMPDIFF(SECOND, Req_WorkStartDate, Req_CloseDate), 60), 2, '0') ) AS Duration FROM Request_Master_Table WHERE REQ_NO = '10348';
给你拆解一下写法逻辑:
- 首先用
TIMESTAMPDIFF(SECOND, 开始时间, 结束时间)算出两个时间点之间的总秒数,这里要注意参数顺序是「单位,起始时间,结束时间」,和MySQL的TIMEDIFF刚好反过来,别搞混了。 - 总秒数除以3600取整,得到累计的小时数(比如你例子里的47小时,超过24也能正确计算)。
- 用总秒数对3600取模,得到剩下的秒数,再除以60取整就是分钟数,用
LPAD补个前导零保证是两位格式。 - 最后总秒数对60取模就是秒数,同样补零。
- 用
CONCAT把这三部分拼起来,就得到和MySQL一模一样的HH:MM:SS格式了。
这个写法在绝大多数DB2版本里都能正常运行,完全匹配你要的输出效果。
内容的提问来源于stack exchange,提问作者Imbesat Anwar
相关产品推荐
相关产品推荐

