Sql 使用sum()添加时间类型的所有值
我在一个表中有一列,它的值是类似时间的类型 01:12和05:14 我想使用sum来添加值,并得到与06:26相同类型的结果 我用这个代码来做我想做的事Sql 使用sum()添加时间类型的所有值,sql,string,oracle,datetime,sum,Sql,String,Oracle,Datetime,Sum,我在一个表中有一列,它的值是类似时间的类型 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 (S
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
案例
当总和(最小值)=60
然后
TO|CHAR(总和(小时)+1)| |’:00
当总和(最小值)<60
然后
至_CHAR(总和(小时))
|| ':'
||至字符(总和(最小))
其他的
托查(
总数(小时)
+(总和(分钟)/60
-(国防部)(
总和(最小值),60)/60)
)
|| ':'
||托查(
国防部(
总和(最小值),60%)
结束
虽然成功了,但有点复杂。。。有什么比我做的更简单的吗…请告诉我。。。谢谢您可以使用算术,然后使用字符串函数 如果在单独的列中显示总小时和分钟数:
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”的字符串开始(与查询中显示的内容相反):
:
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 |
谢谢你,但我正在寻找的东西,不需要分分钟和小时。。。时间列中的数据是这样的06:07,我将小时和分钟分开。。。不管你的代码是什么,谢谢你easier@FatemehAzizkhani:ok-您的查询中未显示该选项。请参阅我的编辑。
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 |