我正在创建一个查询。在该查询中,我希望从系统日期开始减去日期。我的桌子就像下面一样。
Table Name : Employee
---------------------
ID
NAME
JOINDATE
我正在编写此查询以获取结果
SELECT * FROM SS.EMPLOYEE WHERE (sysdate - JOINDATE)='05-Ded-11'
这会引发以下错误:
SQL Error: ORA-00920: invalid relational operator
那怎么办?如果有人知道请帮助我。
答案 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
给出。您可以将此函数的结果与数字(月)进行比较。