将VARCHAR2转换为数字

Kri*_*ana 5 sql oracle

我有一个名为列的表duration.它的数据类型是VARCHAR2.

我想总结一下这个专栏duration.

00:56:30
02:08:40
01:01:00
Run Code Online (Sandbox Code Playgroud)

总=> 04:05:10

如何使用ANSI SQL或Oracle SQL执行此操作?

Noe*_*oel 10

您可以使用小时,分钟和秒来分隔SUBSTR,然后SUM使用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);
Run Code Online (Sandbox Code Playgroud)


Yas*_*aev 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
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,我发现`sum`聚合函数不适用于`INTERVAL`数据类型,所以你应该使用PL/SQL代码迭代所有记录来聚合`INTERVAL`值,或者编写你自己的聚合函数,如上所述[这里](https://forums.oracle.com/forums/thread.jspa?threadID=291552)在Oracle OTN论坛或[这里](http://asktom.oracle.com/pls/asktom/f? p = 100:11 ::::: P11_QUESTION_ID:5269744394385)(问汤姆). (2认同)