如何将结果转成分钟数并且求和

微信截图_20240808143152.png

FineReport 用户f0613105 发布于 2024-8-8 14:32
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
用户k6280494Lv6资深互助
发布于2024-8-8 14:35
方法1:使用日期算术

这是最直接的方法,通过将两个时间点相减(得到的是天数差),然后将这个差值乘以24小时(转换为小时差),再乘以60分钟(转换为分钟差)。

sql复制代码

SELECT  
(CAST(end_time AS DATE) - CAST(start_time AS DATE)) * 24 * 60 AS minutes_diff
FROM  
your_table;

注意:这里假设start_time和end_time是你的时间戳或日期字段。如果它们已经是DATE类型,那么CAST函数可能不是必需的。

方法2:使用NUMTODSINTERVAL和EXTRACT

这个方法首先将两个时间点的差值转换为INTERVAL DAY TO SECOND类型,然后使用EXTRACT函数从中提取分钟数。

sql复制代码

SELECT  
EXTRACT(DAY FROM diff) * 1440 +  
EXTRACT(HOUR FROM diff) * 60 +  
EXTRACT(MINUTE FROM diff) AS minutes_diff
FROM  
(SELECT  
NUMTODSINTERVAL(CAST(end_time AS TIMESTAMP) - CAST(start_time AS TIMESTAMP), 'DAY') AS diff
FROM  
your_table
) t;

注意:这里同样假设start_time和end_time是你的时间戳或日期字段,并且可能需要根据实际数据类型进行CAST转换。NUMTODSINTERVAL函数将两个时间点的差值转换为INTERVAL DAY TO SECOND类型,其中'DAY'是目标间隔的单位。然后,通过EXTRACT函数分别提取天数、小时数和分钟数,并手动计算总分钟数。

方法3:简化版(仅当end_time >= start_time)

如果你确定end_time总是大于或等于start_time,并且你不需要处理跨越日期边界的情况(即都在同一天内),你可以使用以下简化方法:

sql复制代码

SELECT  
((CAST(end_time AS TIMESTAMP) - CAST(start_time AS TIMESTAMP)) * 1440) AS minutes_diff
FROM  
your_table;

这里,我们将差值直接乘以1440(每天的分钟数),以得到分钟差。注意,这假设了两个时间点都是TIMESTAMP类型,如果不是,则可能需要使用CAST函数进行转换。

选择哪种方法取决于你的具体需求,包括你的数据类型(DATE还是TIMESTAMP)以及是否需要处理跨越日期的差异。

最佳回答
0
JL98Lv6中级互助
发布于2024-8-8 14:36(编辑于 2024-8-8 14:36)

ORACLE为例

SELECT

 (CAST(end_time AS TIMESTAMP) - CAST(start_time AS TIMESTAMP)) * (24 * 60) AS minutes_difference

FROM

 your_table_name;

  • 用户f0613105 用户f0613105(提问者) 我字段存的并不是时间类型,只存了时分秒,这样相减之后得出来的结果准换不了是为什么呢 请问
    2024-08-08 14:41 
  • JL98 JL98 回复 用户f0613105(提问者) 试一下下面的两个 SELECT (CAST(end_time AS TIMESTAMP) - CAST(start_time AS TIMESTAMP)) * 1440 AS minutes_difference FROM your_table; SELECT (TO_TIMESTAMP(end_time_str, 'HH24:MI:SS') - TO_TIMESTAMP(start_time_str, 'HH24:MI:SS')) * 1440 AS minutes_difference FROM your_table;
    2024-08-08 14:45 
  • 3关注人数
  • 97浏览人数
  • 最后回答于:2024-8-8 14:36
    请选择关闭问题的原因
    确定 取消
    返回顶部