甲骨文-选择最近20年聘用的员工

Alpha2k

我不能使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章