将 INTERVAL DAY 转换为 SECOND

joh*_*rue 0 sql oracle

我想使用间隔数据类型获得更具可读性的值。

select cast(last_run_duration as INTERVAL DAY TO SECOND(0))
from dba_scheduler_jobs
order by 1 desc;
Run Code Online (Sandbox Code Playgroud)

查询结果是这样的;

+00 00:00:04.630530
+00 00:00:01.352359
+00 00:00:00.737282
+00 00:00:00.594381
+00 00:00:00.432710
Run Code Online (Sandbox Code Playgroud)

我想要的是这个。只获取小时:分钟:秒;

 00:00:04
 00:00:01
 00:00:00
 00:00:00
 00:00:00
Run Code Online (Sandbox Code Playgroud)

last_run_duration 列的数据类型是 INTERVAL DAY(9) TO SECOND(6)

Wer*_*eit 5

INTERAVL DAY TO SECOND有固定的输出格式,TO_CHAR不起作用。

EXTRACT按照 Edumelzer 的建议使用

select lpad(extract(hour from last_run_duration),2,'0')||':'||
       lpad(extract(minute from last_run_duration),2,'0')||':'||
       lpad(round(extract(second from last_run_duration)),2,'0') as duration
  from dba_scheduler_jobs
 order by 1 desc;
Run Code Online (Sandbox Code Playgroud)

或者使用像这样的子字符串

select 
REGEXP_SUBSTR(last_run_duration, '\d{2}:\d{2}:\d{2}')
from from dba_scheduler_jobs;
Run Code Online (Sandbox Code Playgroud)