0

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

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

可能有效的一件事是转换 String(Time_taken_display)->To_TIME(Time_taken_display in Time format)->TO_NUM(Time_taken_display in minutes in number format),但这将非常低效。

4

1 回答 1

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. 使用类型转换函数:

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

但根据@alex Poole 的评论,我将使用 ENLAPSED_SECONDS 字段,因为它在秒和数字数据类型中很容易获得。

于 2018-01-19T21:41:46.683 回答