我不能使用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
sysdate
重新调整当前日期和时间。
在下面的第二个测试用例中,您要减去两个日期,这些日期返回表示两个日期之间的天数的数值,因此可以进行计算(可以进行除法)。
(SYSDATE-hiredate)/(365+1/4-1/100+1/400)
在下面的第一个测试用例中,您正在直接尝试划分日期类型值。您不能在oracle中划分日期数据类型。相反,您可以添加任何值,例如x(sysdate +x
),这意味着您要在日期值中添加x天。
(SYSDATE/(365+1/4-1/100+1/400))-5
万一您想将其转换sysdate
为数字,可以尝试如下
select to_number(to_char(sysdate, 'yyyymmddhh24miss')) from dual;
就像20140608165750
今天一样,这将为您返回DATE + TIME 。
(或者)
select to_number(to_char(sysdate, 'yyyymmdd')) from dual;
结果将是20140608
(仅DATE部分)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句