2015-10-15 30 views
0

我有一个显示结果如下的Oracle SQL查询:如何修剪或格式化HH:MM:在Oracle中的SQL查询SS.ms值

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

请指导。

+0

什么是'STARTDATE的数据类型'和'ENDDATE'?谢谢。 –

+0

@Bob - 时间戳 – user2325154

回答

0

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

印刷目的,只是用to_char()

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

因为这种差异默认为“日向第二”的区间,你只需要包括这些元素。

0

两个时间戳的差异已经非常格式化,正在打印的格式 +/-天数小时:分钟:seconds.milliseconds

为什么你不想要的+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, ' ')))> 0,则SUBSTR(START_TIME-END_TIME,1,INSTR(START_TIME-END_TIME,'') )别人的“结束 获得天

SUBSTR(START_TIME-END_TIME,INSTR(START_TIME-END_TIME,数'“))完全去除天