我有一个查询和苹果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",
答案 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抱怨。
我创建的用例就是为了做到这一点。