Oracle DB:将字符串(时间戳)转换为数字(分钟)

时间:2018-01-18 21:04:12

标签: oracle query-performance rman

所以,我正在尝试在RMAN目录中构建一个查询(使用RC_RMAN_BACKUP_JOB_DETAILS)来比较每个数据库(DB_NAME)的最近备份持续时间(TIME_TAKEN_DISPLAY)及其历史平均AVG备份持续时间(TIME_TAKEN_DISPLAY)。

如何将TIME_TAKEN_DISPLAY(时间戳; HH:MM:SS)(即VARCHAR2格式)转换为分钟格式(即仅数字),以便针对整个RC_RMAN_BACKUP_JOB_DETAILS运行查询,以比较过去的AVG时间和时间为每个数据库进行最后一次备份。

可能有用的一件事是转换字符串(Time_taken_display) - > To_TIME(时间格式的Time_taken_display) - > TO_NUM(数字格式的分钟数Time_taken_display),但这将是非常低效的。

1 个答案:

答案 0 :(得分:0)

根据要求,解决方案可以非常简单和复杂:

  1. 一个简单的解决方案是:

    从RC_RMAN_BACKUP_JOB_DETAILS中选择avg(substr(TIME_TAKEN_DISPLAY,0,2)* 60 + substr(TIME_TAKEN_DISPLAY,4,2)+ substr(TIME_TAKEN_DISPLAY,7,2)/ 60);

  2. 使用类型转换函数:

  3. 使用TO_TIMESTAMP将TIME_TAKEN_DISPLAY转换为时间格式,然后转换为TO_NUMBER,但我不想采用这种方法,因为我计划针对视图中记录的所有数据库运行脚本,并且多次转换会使性能效率低下。

    但是根据@alex Poole评论,我将使用ENLAPSED_SECONDS字段,因为它可以在几秒钟和数字数据类型中随时可用。