初学者问题(Oracle SQL)-Varchar和SUM错误

时间:2019-02-22 16:24:59

标签: sql oracle

我目前正在使用Oracle SQL Developer在大学学习PL / SQL。我遇到一个问题,我必须将.csv文件导入到表中,并且必须汇总称为TIME的列的所有元素(由分钟,秒和毫秒组成)。

但是,该列由VARCHAR组成,格式如下:

TIME
01:00.250
02:37.408
01:29.803
...

我一直遇到错误,主要是因为该列上包含非数字字符(“:”和“。”),因此无法完成总和。我检查了其他主题,看到有人说要使用TO_CHAR,TO_DATE,但似乎没有解决方案。

是否有更好/简单的方法来解决此问题?

任何帮助将不胜感激。 :)

1 个答案:

答案 0 :(得分:2)

Oracle没有time数据类型。因此,如果要对这些值求和,则一种简单的方法是将值转换为秒:

select sum( to_number(substr(time, 1, 2)) * 60 +
            to_number(substr(time, 4)) 
          ) as seconds

要将值转换回数字的字符串表示形式:

select floor(seconds / 60) || ':' || (case when seconds < 10 then '0' || mod(seconds, 60) else '' || mod(seconds, 60) end) as mmss
from (select (sum( to_number(substr(time, 1, 2)) * 60 +
              to_number(substr(time, 4)) 
             ) as seconds
      . . .
     ) s