Oracle SQL Retrieve在2周内完成

时间:2015-03-23 17:24:37

标签: sql oracle date

我试图在我的桌子上返回汽车信息'汽车'其中有MOT将在未来两周内到期。 MOTDUE被定义为to_date('2015-03-25', 'yyyy-mm-dd');

SELECT * FROM Cars WHERE MOTDUE = CURRENT_DATE + INTERVAL '2' WEEK;

只是给了我"缺少或无效的日期时间字段"错误。

感谢。

3 个答案:

答案 0 :(得分:2)

根据“未来两周内”的含义并假设MOTDUE列的数据类型为DATE,以下内容应该为您提供所需(或至少,允许你适当修改):

select *
from   cars
where  motdue < trunc(sysdate) + 14
and    motdue >= trunc(sysdate);

答案 1 :(得分:1)

试试这个:

SELECT * FROM Cars WHERE MOTDUE = CURRENT_DATE + INTERVAL '14' DAY;

答案 2 :(得分:0)

Oracle中有两种类型的INTERVAL - YEAR TO MONTHDAY TO SECOND。因此YEARMONTHDAYHOURMINUTESECOND都是有效的增​​量。遗憾的是,WEEK不是(遗憾的是FORTNIGHT)。 ANSI标准的执行方式如下:

SELECT * FROM cars
 WHERE motdue >= CURRENT_DATE
   AND motdue < CURRENT_DATE + INTERVAL '14' DAY;

上述问题在于,在Oracle中,ANSI标准CURRENT_DATE并不符合ANSI标准 - 它的时间部分与SYSDATE类似。如果您不想在午夜截断日期,那就没问题了。