如何查询分钟级时间差?现有SQL查询计算结果不符预期
问题分析
你当前的写法错误在于:STRFTIME("%H%M")返回的是类似1030这样的十进制数字,直接相减是按100进制计算,而时间是60进制,所以结果不符合预期。比如10:30 - 08:17,用你的方法算出来是1030-817=213,但实际分钟差是(10*60+30)-(8*60+17)=133。
正确解决方案
方法1:用Unix时间戳计算(支持跨天/带日期的时间)
将时间转换为Unix时间戳(秒数),相减后除以60得到分钟差,这是最稳妥的方式,即使时间跨天也能正确计算:
SELECT arrival_time, discharge_time ,(STRFTIME("%s", discharge_time) - STRFTIME("%s", arrival_time)) / 60 AS time_delta FROM table;
方法2:拆分小时和分钟计算(仅适用于同一天的时间)
分别提取小时和分钟,转换为总分钟数后再相减:
SELECT arrival_time, discharge_time ,(STRFTIME("%H", discharge_time)*60 + STRFTIME("%M", discharge_time)) - (STRFTIME("%H", arrival_time)*60 + STRFTIME("%M", arrival_time)) AS time_delta FROM table;
注意:如果你的时间字段包含日期信息,或者存在跨天的情况,优先使用方法1,避免出现负数或错误结果。
内容的提问来源于stack exchange,提问作者kpzor
相关产品推荐
相关产品推荐

