2015-12-07 270 views
-1

我需要查找兩個日期之間的天數。兩個日期之間的oracle差異

這裏是代碼:

declare 
datum DATE; 
sdate DATE; 
shpord NUMBER; 
rozdiel NUMBER; 
MESSAGE VARCHAR(2000) := 'Nemozete Uvolnit VO c.'; 

begin 
datum := TO_DATE('&OLD:NEED_DATE','DD.MM.YYYY'); 
sdate := TO_DATE(sysdate,'DD.MM.YYYY'); 

rozdiel := datum - sdate; 
IF rozdiel > 5 THEN 
    ERROR_SYS.Record_General('Nemozete Uvolnit VO c',''); 
END IF; 
end; 

我得到一個錯誤:

ORA-01858: a non-numeric character was found where a numeric was expected

+1

@Consider在未來,請也編輯出謝謝和其他類似的噪音。這將使您的建議編輯更完整。 – ryanyuyu

+2

**不要**:'sdate:= TO_DATE(sysdate,'DD.MM.YYYY');'。 'sysdate'是**已經是日期**。你的代碼需要'sysdate'並隱含地將它轉換成一個字符串,因爲'to_date'需要一個字符串。用於隱式轉換的格式基於'NLS_DATE_FORMAT'。然後'to_date'將該字符串翻譯回日期。如果NLS_DATE_FORMAT'與您爲日期指定的字符串不匹配,那麼往返字符串和返回的往返行程將導致錯誤或不正確的結果。 –

+1

對'date'值調用'to_date()'將其轉換爲'date'顯然是錯誤的。 –

回答

0

改變這一行:

sdate := TO_DATE('sysdate','DD.MM.YYYY'); 

到:

sdate := sysdate; 

您正嘗試將STRING'sysdate'轉換爲日期,而不是sysdate的函數結果。

另外,請注意你的nls設置,如果你的日期格式沒有設置爲'dd.mm.yyyy',你會得到一個錯誤。

+0

你好,是科西嘉,但是有同樣的錯誤。我認爲有不同的數據類型存在問題。但我不知道在哪裏。 – denn

+0

作爲一個NUMBER的重要性。 – denn

+0

@denn:一旦我修復'sysdate'問題,它就可以工作......所以如果你仍然收到錯誤,請顯示完整的腳本,顯示完整的錯誤...所以我們可以看到錯誤/它在哪裏發生。 (並顯示全部輸入:) :) – Ditto

3

不要在日期上撥打to_datesysdate已經是date。如果你想從當天的午夜減去datum

declare 
    datum DATE; 
    sdate DATE; 
    shpord NUMBER; 
    rozdiel NUMBER; 
    MESSAGE VARCHAR(2000) := 'Nemozete Uvolnit VO c.'; 
begin 
    datum := TO_DATE('&OLD:NEED_DATE','DD.MM.YYYY'); 
    sdate := trunc(sysdate); 

    rozdiel := datum - sdate; 
    IF rozdiel > 5 THEN 
    ERROR_SYS.Record_General('Nemozete Uvolnit VO c',''); 
    END IF; 
end;