gpt4 book ai didi

sql - 使用 sum() 将所有具有时间类型的值相加

转载 作者:行者123 更新时间:2023-12-04 03:56:17 24 4
gpt4 key购买 nike

我在表中有一列,值的时间类型如下01:12 和 05:14我想使用 sum 来添加值并获得与 06:26 相同类型的结果我用这段代码做了我想做的事

CASE
WHEN SUM (min) = 60
THEN
TO_CHAR (SUM (hour) + 1) || ':00'
WHEN SUM (min) < 60
THEN
TO_CHAR (SUM (hour))
|| ':'
|| TO_CHAR (SUM (min))
ELSE
TO_CHAR (
SUM (hour)
+ ( SUM (min)/60
- (MOD (
SUM (min),60)/60))
)
|| ':'
|| TO_CHAR (

MOD (
SUM (min),60))
END

它成功了,但是有点复杂……有没有比我做的更简单的事情……请告诉我……谢谢

最佳答案

您可以使用算术,然后是字符串函数。

如果您在单独的列中显示总小时数和分钟数:

floor(sum(hour * 60 + min) / 60 total_hours,
mod(sum(hour * 60 + min), 60) total_minutes

如果您希望结果格式为 HH24:MI:

lpad(floor(sum(hour * 60 + min) / 60), 2, '0') 
|| ':'
|| lpad(mod(sum(hour * 60 + min), 60), 2, '0') total_time

如果您从格式为“HH24:MI”的字符串开始(与查询中显示的相反):

lpad(floor(sum(substr(col, 1, 2) * 60 + substr(col, -2)) / 60), 2, '0') 
|| ':'
|| lpad(mod(sum(substr(col, 1, 2) * 60 + substr(col, -2)), 60), 2, '0') total_time

Demo on DB Fiddle :

with t as (
select 1 hour, 12 min from dual
union all select 6 hour, 26 min from dual
)
select lpad(floor(sum(hour * 60 + min) / 60), 2, '0')
|| ':'
|| lpad(mod(sum(hour * 60 + min), 60), 2, '0') total_time
from t

| TOTAL_TIME |
| :--------- |
| 07:38 |


with t as (
select '01:12' col from dual
union all select '06:26' from dual
)
select lpad(floor(sum(substr(col, 1, 2) * 60 + substr(col, -2)) / 60), 2, '0')
|| ':'
|| lpad(mod(sum(substr(col, 1, 2) * 60 + substr(col, -2)), 60), 2, '0') total_time
from t

| TOTAL_TIME |
| :--------- |
| 07:38 |

关于sql - 使用 sum() 将所有具有时间类型的值相加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63856524/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com