如何使用oracle内联查询从sysdate中减去日期?

时间:2012-07-25 14:11:08

标签: oracle oracle11g

我正在创建一个查询。在该查询中,我希望从系统日期开始减去日期。我的桌子就像下面一样。

Table Name : Employee
---------------------
ID
NAME
JOINDATE

我正在编写此查询以获取结果

SELECT * FROM SS.EMPLOYEE WHERE (sysdate - JOINDATE)='05-Ded-11'

这会引发以下错误:

SQL Error: ORA-00920: invalid relational operator

那怎么办?如果有人知道请帮助我。

1 个答案:

答案 0 :(得分:2)

在Oracle date算术中,减去两个日期会导致两个日期之间的天数:

SQL> SELECT DATE '2000-12-31' - DATE '2000-01-01' year FROM DUAL;

      YEAR
----------
       365

因此,您的WHERE子句对Oracle不正确,因为它无法将数字与日期进行比较。你想用这种比较表达什么?

如果您想在给定日期之前过滤所有日期,只需比较两个日期:

SELECT * FROM SS.EMPLOYEE WHERE joindate <= to_date('2011-12-05', 'yyyy-mm-dd')

如果要选择给定时间间隔内的所有行,可以使用多个比较或运算符BETWEEN

SELECT * 
  FROM SS.EMPLOYEE 
 WHERE joindate BETWEEN to_date('2011-12-05', 'yyyy-mm-dd') AND SYSDATE

更新

两个日期之间的月数由函数MONTHS_BETWEEN给出。您可以将此函数的结果与数字(月)进行比较。