【发布时间】:2014-07-29 06:37:56
【问题描述】:
我不能使用months_between,只允许玩DATE,所以我得到了这个:
select * from emp
where ((SYSDATE- hiredate)/(365+1/4-1/100+1/400)) >= ((SYSDATE/(365+1/4-1/100+1/400))-20);
我不明白为什么我会出错
(SYSDATE/(365+1/4-1/100+1/400))-20
说它是无效的数据类型“不一致的数据类型:预期的 %s 得到 %s”时
(SYSDATE-hiredate)/(365+1/4-1/100+1/400)
工作正常,没有错误,WTF?
PS:使用 (365+1/4-1/100+1/400) 的例子是出生日期,更精确:
((SYSDATE- birth_date)/(365+1/4-1/100+1/400)) >=18
【问题讨论】:
-
也许使用
hiredate >= add_months(sysdate, -12 * 20)或者间隔会更清晰。 -
我会尝试 select to_number (sysdate-to_date('19940610','yyyymmdd'))/7305 from dual;然后比较它(注意:20 年总是有固定的天数)