输入指定范围内的年份

时间:2017-07-18 13:38:35

标签: oracle plsql

我有一个查询和苹果CASE功能并收到错误

  

(完整)年份必须介于-4713和+9999之间,而不是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", 

2 个答案:

答案 0 :(得分:0)

我认为你可以简单地制作

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

答案 1 :(得分: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抱怨。

我创建的用例就是为了做到这一点。