SQL中timestamp时间差转换为小时分钟格式的高效实现方法问询
Oracle时间间隔转小时分钟格式实现方案
你在SQL Developer中对两个Timestamp字段做减法得到的是INTERVAL DAY TO SECOND类型的时间间隔,以下两种方案都可以直接实现转换为总小时+分钟的格式,比手动累加的逻辑更简洁易读,执行效率没有差异:
方案1:转DATE类型直接计算(无需嵌套子查询)
DATE类型相减的结果单位为天,直接做算术运算即可得到总小时、分钟值:
SELECT TRUNC((CAST(created_dt_1 AS DATE) - CAST(created_dt_2 AS DATE)) * 24) || '小时' || MOD(TRUNC((CAST(created_dt_1 AS DATE) - CAST(created_dt_2 AS DATE)) * 24 * 60), 60) || '分钟' AS delivery_time_hm FROM "ORDER";
注意:
order是SQL保留关键字,作为表名使用时需要用双引号包裹避免语法报错。
方案2:基于INTERVAL结果直接提取(保留原有差值计算逻辑)
如果你已经封装好了时间间隔的计算逻辑,可以直接用EXTRACT函数提取各单位值拼接:
SELECT (EXTRACT(DAY FROM delivery_time) * 24 + EXTRACT(HOUR FROM delivery_time)) || '小时' || EXTRACT(MINUTE FROM delivery_time) || '分钟' AS delivery_time_hm FROM ( SELECT (created_dt_1 - created_dt_2) AS delivery_time FROM "ORDER" );
你示例中的时间间隔+02 05:12:30.651000用以上两种方案转换后,结果均为53小时12分钟,符合需求。
内容的提问来源于stack exchange,提问作者BHW
相关产品推荐
相关产品推荐

