在SQL Developer中查询sysdate对字段

时间:2015-11-18 16:33:31

标签: oracle

SELECT LAST_MAINTAIN, PLANE_ID
FROM PLANE
WHERE MONTHS BETWEEN(
      (TO_DATE('sysdate',        'MM/DD/YYYY'),
       TO_DATE('LAST_MAINTAIN',  'MM/DD/YYYY')))
       >24;

我正在尝试从Plane表中选择Last_Maintain,一个日期字段,并返回在今天的日期和上次维护之间有2年的结果。有谁知道什么是错的?我有一种感觉,我错误地使用了几个月,但我不确定。感谢

编辑:调整sysdate和Last_Maintain的位置,仍然错误地说我错过了一个括号(右),即使我经历了所有括号而没有看到一个丢失。

Edit2:试过了

SELECT *
  FROM plane
WHERE MONTHS BETWEEN (sysdate, last_maintain ) > 24;

仍然告诉我需要更多括号。

编辑3:问题已解决,这是最终的代码:

SELECT *
  FROM plane
WHERE MONTHS_BETWEEN (sysdate, last_maintain) > 24;

2 个答案:

答案 0 :(得分:2)

  • 请勿在约会时致电to_dateto_date将字符串转换为日期。只有将字符串传递给to_date
  • 才有意义
  • sysdate是一个返回date的函数。这与文字字符串sysdate
  • 非常非常不同

你可能想要

SELECT *
  FROM plane
 WHERE months_between( sysdate, last_maintain ) > 24

答案 1 :(得分:0)

MONTHS_BETWEEN将结果作为第一秒返回,因此在您的情况下,所有值都是< 0.把sysdate放在第一位。

来自Oracle doc:

"如果date1早于date2,则结果为否定"