5

という名前の列を持つテーブルがありますduration。そのデータ型はVARCHAR2.

列を合計したいduration

00:56:30
02:08:40
01:01:00

合計=>04:05:10

ANSI SQL または Oracle SQL を使用してこれを行うにはどうすればよいですか?

4

4 に答える 4

10

を使用して時間、分、秒を分離しSUBSTRSUM最後にNUMTODSINTERVAL関数を使用して型に変換できますINTERVAL

SELECT NUMTODSINTERVAL (SUM (total_secs), 'second')
  FROM (SELECT   SUBSTR (duration, 1, 2) * 3600
               + SUBSTR (duration, 4, 2) * 60
               + SUBSTR (duration, 7, 2) total_secs
          FROM user_tab);
于 2013-05-29T12:04:59.453 に答える
7

INTERVAL文字列を最初に変換し、これらの値を日付値として追加する方が良いと思います。次のようなもの:

select   to_dsinterval('0 00:56:30') 
       + to_dsinterval('0 02:08:40') 
       + to_dsinterval('0 01:01:00') myinterval from dual;

MYINTERVAL
-------------------
+000000000 04:06:10
于 2013-05-29T11:36:52.383 に答える
4

FOR ORACLE

select 
numtodsinterval(sum(
  to_char(to_date(duration, 'HH24:MI:SS'), 'HH24') * 3600 + 
  to_char(to_date(duration, 'HH24:MI:SS'), 'MI') * 60+
  to_char(to_date(duration, 'HH24:MI:SS'), 'SS')
  ), 'second'
) as SUMTOTAL
from tbl;

Second query

select 
numtodsinterval(hr+mn+sc, 'second')
from 
(
select 
sum(to_char(to_date(duration, 'HH24:MI:SS'), 'HH24') * 3600) as hr,
sum(to_char(to_date(duration, 'HH24:MI:SS'), 'MI') * 60) as mn,
sum(to_char(to_date(duration, 'HH24:MI:SS'), 'SS'))as sc
from tbl) tmp

FIDDLE

Example returning an object in SQL FIDDLE. try on your machine

FOR MYSQL

Try this

select sec_to_time(sum(time_to_sec(duration))) from tbl

FIDDLE

| SEC_TO_TIME(SUM(TIME_TO_SEC(DURATION))) |
-------------------------------------------
|          January, 01 1970 04:06:10+0000 |
于 2013-05-29T11:42:16.967 に答える