2017-07-18 78 views
0

我有一個查詢和蘋果CASE與作用得到錯誤輸入年份在指定範圍內

(full) year must be between -4713 and +9999, and not be 0

此代碼產生錯誤:

NVL(  
CASE WHEN Ea.ASGACTSTART < add_months(SYSDATE,-12) THEN 365 
ELSE 
to_number(to_char(to_date('1','J') + 
((SYSDATE -1) - Ea.ASGACTSTART), 'J')) 
END , 0) "Adujsted Days", 
+0

to_number(to_char(to_date('1','J')')的用途是什麼? –

回答

0

我想你可以簡單地

CASE WHEN Ea.ASGACTSTART < add_months(SYSDATE,-12) THEN 365 
ELSE NVL(SYSDATE - 1 - Ea.ASGACTSTART, 0) 
END AS "Adujsted Days" 
+0

是的,但我需要單個值而不是十進制數字 –

+0

什麼是「單個值」?用TRUNC ()'或'ROUND()'如果需要的話。 –

+0

感謝 我在Excel公式,但我不需要在Excel中任何公式有什麼,我的Excel公式轉換爲ORACEL查詢這裏是Excel公式 = + IF(ISBLANK(@Enddate),IF($ StartDate

0

鑑於:

create table tabby (ASGACTSTART date); 
insert into tabby values (sysdate); 

的問題是你表達的這一部分:

select 
    to_date('1','J') + ((SYSDATE -1) - Ea.ASGACTSTART) 
from tabby ea; 

如果你改變了+,然後你可以看到爲什麼這是一個問題。

select 
    --to_date('1','J') + ((SYSDATE -1) - Ea.ASGACTSTART) 
    to_date('1','J') , ((SYSDATE -1) - Ea.ASGACTSTART) 
from tabby ea; 

根據至少one other post,TO_DATE( '1', 'J')是爲了返回最小的可能的日期可能的。但是,+的右側可能是負面的,因此會導致RDBMS投訴。

我創建的用例就是爲了做到這一點。

+0

數據類型不一致:預計DATE得到DATE JULIAN –