我有這些 varchar :20211026231735。
所以我想要一個查詢,將實際的 sysdate 減去該日期,并將減法轉換為 DAY HOURS AND SECONDS。
select TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS') - start_time from TABLEA where job_name='jOB_AA_BB';
I get 4220.
請問有什么幫助嗎?謝謝
uj5u.com熱心網友回復:
當您使用DATE資料型別進行日期時間算術時,您會回傳NUMBER幾天。要得到一個INTERVAL你可以減去兩個TIMESTAMPs。您沒有說明 start_time 的資料型別是什么,但您可能會逃脫:
select localtimestamp - start_time
from tablea where job_name='jOB_AA_BB';
LOCALTIMESTAMP為您提供TIMESTAMP當前會話時區的值。還有CURRENT_TIMESTAMP, 它在 a中為您提供相同的內容,TIMESTAMP WITH TIME ZONE并SYSTIMESTAMP在TIMESTAMP WITH TIME ZONE. 您可能需要轉換您的start_time以避免時區差異(如果有)。
uj5u.com熱心網友回復:
您可以使用函式 numtodsinterval將日期算術的結果轉換為間隔。如有必要,然后使用提取物拉出所需的組件。
with tablea(job_name, start_time) as
(select 'jOB_AA_BB','20211026231735' from dual)
select numtodsinterval((SYSDATE - to_date( start_time,'yyyymmddhh24miss')),'hour') date_diff
from tablea where job_name='jOB_AA_BB' ;
with tablea(job_name, start_time) as
(select 'jOB_AA_BB','20211026231735' from dual)
select extract (hour from date_diff) || ':' || extract (minute from date_diff)
from (
select numtodsinterval((sysdate - to_date( start_time,'yyyymmddhh24miss')),'day') date_diff
from tablea where job_name='jOB_AA_BB'
);
注意:除了錯誤之外,我不確定您是如何得到任何結果的,因為您的查詢以a string - a string. 您不應將 sysdate 轉換為字串,而應將字串轉換為日期(最好將其存盤為正確的資料型別 - date)。
uj5u.com熱心網友回復:
您可以將值轉換為日期(而不是轉換SYSDATE為字串),然后減去并顯式將值作為INTERVAL DAY TO SECOND型別回傳:
SELECT (SYSDATE - TO_DATE('20211026231735', 'YYYYMMDDHH24MISS')) DAY TO SECOND
FROM DUAL;
或者,對于您的桌子:
SELECT (SYSDATE - TO_DATE(start_time,'YYYYMMDDHH24MISS')) DAY(5) TO SECOND
FROM TABLEA
WHERE job_name='jOB_AA_BB';
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/338213.html
上一篇:在Oracle中連接值和計數行
