如何计算Temp_cperf表中两日期列的精确分钟时间差?
计算Oracle中日期/时间戳的分钟时间差
问题分析
你的示例数据中,Created_date(16-SEP-23 15:08:14)与Updated_date(16-SEP-23 15:08:35)的时间差为21秒,正确的分钟换算应为 21/60 = 0.35,你提到的0.21是错误的(0.21分钟等于12.6秒,与实际时间差不符)。
如果你的查询结果是0.35,那其实是正确的;但如果字段类型是TIMESTAMP而非DATE,直接使用(Updated_date - Created_date)*24*60可能会因类型运算问题导致结果异常(比如包含小数秒时的偏差)。
正确计算方法
情况1:字段为DATE类型
DATE类型相减直接得到天数,乘以24*60即可转换为分钟,你的原始查询本身是正确的:
SELECT ROUND((Updated_date - Created_date)*24*60, 2) AS Time_DIFF FROM TEMP_CPERF WHERE C_ID = 12345;
情况2:字段为TIMESTAMP类型
TIMESTAMP相减得到INTERVAL DAY TO SECOND类型,需通过EXTRACT函数提取时间分量计算:
SELECT ROUND( (EXTRACT(DAY FROM time_diff)*86400 + EXTRACT(HOUR FROM time_diff)*3600 + EXTRACT(MINUTE FROM time_diff)*60 + EXTRACT(SECOND FROM time_diff))/60, 2 ) AS Time_DIFF FROM ( SELECT Updated_date - Created_date AS time_diff FROM TEMP_CPERF WHERE C_ID = 12345 );
或者更简洁的方式,将TIMESTAMP转换为DATE类型后计算(会截断小数秒,若无需高精度则适用):
SELECT ROUND((CAST(Updated_date AS DATE) - CAST(Created_date AS DATE))*24*60, 2) AS Time_DIFF FROM TEMP_CPERF WHERE C_ID = 12345;
内容的提问来源于stack exchange,提问作者Siva Kumar
相关产品推荐
相关产品推荐

