2013-05-15 41 views
0

我試圖做這樣的事情減去SYSDATE某一特定日期得到的天數

v_target_date := trunc (sysdate) - trunc (TO_DATE (iv_target_date, 'DD-MM-YYYY HH:MI AM')); 

,但我沒有得到我所期待的?我想查看當前sysdate和給定日期之間的區別是什麼?所以如果它超過一個月我應該得到30+天等...

我想根據給定的日期和sysdate傳遞的天數應用邏輯。如果超過48小時(2天),我可以應用邏輯1,否則邏輯2

+0

減去兩個'DATE'類型會給你的天數,所以你應該得到你想要的。你的開始'iv_target_date'值是什麼,你得到了什麼,你想得到什麼?你會得到什麼?數字是否稍低 - 也許你想「結果」而不是兩個日期?什麼類型的'v_target_date'和'iv_target_date'?它看起來像'iv_target_date'是一個字符串,因爲如果它是'DATE',你會做一個不必要的'TO_DATE',並且如果'v_target_date'是一個數字,那麼它是一個稍微奇怪的名字... –

回答

0

如果您只是想要48小時的截止時間,我發現INTERVAL函數更具可讀性。你可以這樣做(我省略了截斷;必要時應用):

dateMinus48Hours := SYSDATE - INTERVAL '48' HOUR; 
IF TO_DATE(iv_target_date, 'DD-MM-YYYY HH:MI AM') < dateMinus48Hours THEN 
    ... more than 48 hours ago 
ELSE 
    ... not more than 48 hours ago 
END IF; 

或者你可以使用這個;你會得到相同的結果:

dateMinus48Hours := SYSDATE - INTERVAL '2' DAY; 
+0

什麼是dateMinus48Hours的數據類型? –

+0

對不起,剛纔看到你的問題。這是'DATE'類型。 –

0

48小時只有2天,所以一個簡單的方法是:

IF TO_DATE (iv_target_date, 'DD-MM-YYYY HH:MI AM') < SYSDATE - 2 THEN 
    -- logic 1 
ELSE 
    -- logic 2 
END IF;