2015-10-15 32 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,數'「))完全去除天