2017-08-03 50 views
2

我有一个叫duration_d在表列是varchar2和数据看起来像下面如何总结分钟和秒?在Oracle

duration_d 
----------- 
12:25 
01:35 
12:10 
04:21 
12:18 
12:24 

我想下面的查询

SELECT SUM(to_date(duration_d, 'mi:ss')) 
    FROM table 
GROUP BY calling_number; 

当我执行它下面的错误是未来

ORA-00933: SQL command not properly ended 
00933. 00000 - "SQL command not properly ended" 

可以任何一个告诉我如何m总结一下吗?

+0

你不能使用和使用日期。当你总结这些持续时间时,你期望什么值? ps:另一件事:如果你想使用to_date,你必须添加其余的信息,而不仅仅是持续时间:ex:to_date('2000-01-01 00:'|| dur,'yyyy-mm- dd hh24:mi:ss') –

+0

[计算sql查询中持续时间的总和]的可能重复(https://stackoverflow.com/questions/891833/calculate-the-sum-of-duration-in-sql-query ) –

回答

3

要获得总不如一天的分数,你可以使用:

SELECT SUM(TO_DATE(duration_d, 'MI:SS') - TO_DATE('00:00', 'MI:SS')) AS total 
FROM your_table 

其中给出结果:

TOTAL 
------------------------------------------ 
0.0383449074074074074074074074074074074074 

将其转换为一个间隔的数据类型,你可以使用NUMTODSINTERVAL

SELECT NUMTODSINTERVAL(
     SUM(TO_DATE(duration_d, 'MI:SS') - TO_DATE('00:00', 'MI:SS')), 
     'DAY' 
     ) AS total 
FROM your_table 

其中给出结果:

TOTAL 
------------------- 
+00 00:55:13.000000 
-1

更正拼写如下

SELECT SUM(TO_DATE(duration_d, 'mi:ss')) 
FROM YOURTABLE Group By calling_number 
+0

谢谢你的更正,但如果我运行上面的查询它给这个 ORA-00932:不一致的数据类型:预期的NUMBER得到日期 00932. 00000 - “不一致的数据类型:预期的%s得到%s” – bharathRaj

+0

为什么downvote .. 。我的repy修复了有问题的问题。 – Prathyush

+0

谢谢,但它没有解决问题@Prathyush – bharathRaj

0

请尝试以下:如果持续时间总是

with x as 
(select sum((regexp_substr(YOUR_COLUMN, '[0-9]+', 1, 1)*60) + 
      regexp_substr(id, '[0-9]+', 1, 2)) seconds 
from YOUR_TABLE) 
SELECT 
    TO_CHAR(TRUNC(seconds/3600),'FM9900') || ':' || 
    TO_CHAR(TRUNC(MOD(seconds,3600)/60),'FM00') || ':' || 
    TO_CHAR(MOD(seconds,60),'FM00') 
FROM x 

只会工作[MI:SS]。

您也可以按照您的要求添加组。

将秒转换为所需的持续时间格式Reference

集团通过

with x as 
(select calling_number,sum((regexp_substr(YOUR_COLUMN, '[0-9]+', 1, 1)*60) + 
      regexp_substr(id, '[0-9]+', 1, 2)) seconds 
from YOUR_TABLE 
group by calling_number) 
SELECT calling_number, 
    TO_CHAR(TRUNC(seconds/3600),'FM9900') || ':' || 
    TO_CHAR(TRUNC(MOD(seconds,3600)/60),'FM00') || ':' || 
    TO_CHAR(MOD(seconds,60),'FM00') 
FROM x 
0

使用的SUBSTRto_charto_dateNVLINSTRreverseSUM的组合。

SELECT "calling_number", 
to_char(to_date(SUM(NVL(SUBSTR("duration_d", 0, INSTR("duration_d", ':')-1), "duration_d"))*60 + 
SUM(substr("duration_d", - instr(reverse("duration_d"), ':') + 1)),'sssss'),'hh24:mi:ss') AS SUM_DURATION_D 
FROM yourtable 
GROUP BY "calling_number" 

输出

calling_number SUM_DURATION_D 
1    00:26:10 
2    00:29:03 

SQL小提琴:http://sqlfiddle.com/#!4/9b0a81/33/0

+0

谢谢,但我想要通过呼叫号码组进行组不会处理它 – bharathRaj

+0

ORA-01722:无效号码 01722. 00000 - “无效号码” *原因:指定的号码无效。 *操作:指定一个有效的号码。 – bharathRaj

+0

是的,我只是 – bharathRaj

相关问题