如何在Oracle SQL查询中修剪或格式化HH:MM:SS.ms值

时间:2015-10-15 20:51:57

标签: sql oracle

我在Oracle SQL中有一个查询,显示结果如下:

SQL:

select 
  uuid, name, 
  to_char(from_tz(startdate, 'UTC') at time zone 'America/New_York', 'yyyy-mm-dd hh24:mi:ss') as startdate_et, 
  to_char(from_tz(enddate, 'UTC') at time zone 'America/New_York', 'yyyy-mm-dd hh24:mi:ss') as enddate_et, 
  (enddate - startdate) as executiontime
from      
  process 
where 
  name = (select name from jobconfiguration where currentprocessid = 'bGd_AAABNaMAAAFQHvY0UyTa');

输出: enter image description here

此处的问题是executiontime列中的数据。毫秒值太长,我想从头开始删除+00并将02.951000修剪为02.9503.284000修剪为03.28。< / p>

请指导。

2 个答案:

答案 0 :(得分:0)

两个时间戳之间的差异是间隔。默认情况下,这包括第二部分的长分数。

出于打印目的,只需使用to_char()

to_char(fenddate - startdate, 'dd hh24:mi:ss') as executiontime

因为差异的默认值是“天到秒”的间隔,所以您只需要包含这些元素。

答案 1 :(得分:0)

两个时间戳的差异已经很好地格式化并以格式打印 +/-天数小时:分钟:秒。毫秒

为什么你不想要+00,是因为它是0天? 我假设如果天差大于零,你会想要吗?

无论如何,使用 substr 更容易根据需要格式化输出,并在使用天数时使用案例。

例如 substr(start_time-end_time,instr(start_time-end_time,'。')+ 1,2)将毫秒修剪为两位数。

to_number的情况(substr(start_time-end_time,1,instr(start_time-end_time,'')))&gt; 0然后substr(start_time-end_time,1,instr(start_time-end_time,''))else''结束 获得天数

substr(start_time-end_time,instr(start_time-end_time,''))完全删除日期