我目前正在使用Oracle SQL Developer在大学学习PL / SQL。我遇到一个问题,我必须将.csv文件导入到表中,并且必须汇总称为TIME的列的所有元素(由分钟,秒和毫秒组成)。
但是,该列由VARCHAR组成,格式如下:
TIME
01:00.250
02:37.408
01:29.803
...
我一直遇到错误,主要是因为该列上包含非数字字符(“:”和“。”),因此无法完成总和。我检查了其他主题,看到有人说要使用TO_CHAR,TO_DATE,但似乎没有解决方案。
是否有更好/简单的方法来解决此问题?
任何帮助将不胜感激。 :)
答案 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