2017-07-18 116 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 –