是否可以在INTERVAL DAY TO SECOND数据类型上使用SUM查询?

时间:2012-12-11 19:24:30

标签: sql oracle

是否可以使用SUM查询为我提供将两列相加的结果? 这些列使用INTERVAL DAY TO SECOND数据类型,我想从两列添加时间给我一个总时间。

感谢您阅读!

2 个答案:

答案 0 :(得分:2)

SUM用于聚合多行,将值一起添加。要从同一行添加两列,请使用+。例如,给定一个包含此数据的表T

 A | B
---+---
 1 | 2
 3 | 4

您可以编写SELECT SUM(a), SUM(b) FROM t来获取使用加法汇总T行的单行:

 SUM(A) | SUM(B)
--------+--------
      4 |      6

SELECT a + b FROM t将两列添加到一起:

 A+B
-----
   3
   7

SELECT SUM(a) + SUM(b) FROM tSELECT SUM(a+b) FROM t(根据您的喜好)结合两种效果:

 SUM(A)+SUM(B)                 SUM(A+B)
---------------               ----------
            10                       10

对于INTERVAL DAY TO SECOND,情况有点棘手,因为the SUM function仅适用于“任何数值数据类型或任何可以隐式转换为数值数据类型的非数字数据类型”。所以你必须来回做一些转换。鉴于此表:

 A                  | B
---------------------+-------------------
 +1 01:01:01.000001 | +2 02:02:02.000002
 +3 03:03:03.000003 | +4 04:04:04.000004

此查询:

SELECT NUMTODSINTERVAL(SUM(EXTRACT(DAY FROM a + b)), 'DAY') +
       NUMTODSINTERVAL(SUM(EXTRACT(HOUR FROM a + b)), 'HOUR') +
       NUMTODSINTERVAL(SUM(EXTRACT(MINUTE FROM a + b)), 'MINUTE') +
       NUMTODSINTERVAL(SUM(EXTRACT(SECOND FROM a + b)), 'SECOND') AS "SUM(A+B)"
  FROM t
;

会给出这个结果:

 SUM(A+B)
---------------------
 +10 10:10:10.000010

答案 1 :(得分:1)

你可以添加间隔,没问题:

SQL> select a, b, a+b from t;

A                    B                    A+B
-------------------- -------------------- -----------------------------
+01 00:00:00.000000  +00 00:05:00.000000  +000000001 00:05:00.000000000
+02 00:00:00.000000  +00 00:50:00.000000  +000000002 00:50:00.000000000
+02 00:14:24.000000  +00 00:50:12.000000  +000000002 01:04:36.000000000