在SQL中使用日期

在SQL中使用日期,sql,oracle11g,Sql,Oracle11g,我知道这个查询是不对的,而且有点混乱。但它显示了我想做什么。我想弄清楚的是如何在查询中使用当前日期。基本上我想从当前日期中减去一个存储的日期,如果结果小于30,就做些什么。但我显然不知道如何处理约会。。。。我假设它不应该是char值,但如果我只使用sys date,oracle会给我一个表错误 select e.STUDENT_ID from COURSES c, CLASS_ENROLLMENT e, (SELECT TO_CHAR (SYSDATE, 'MM-DD-YYYY') as

我知道这个查询是不对的,而且有点混乱。但它显示了我想做什么。我想弄清楚的是如何在查询中使用当前日期。基本上我想从当前日期中减去一个存储的日期,如果结果小于30,就做些什么。但我显然不知道如何处理约会。。。。我假设它不应该是char值,但如果我只使用sys date,oracle会给我一个表错误

select e.STUDENT_ID
   from COURSES c, CLASS_ENROLLMENT e, (SELECT TO_CHAR (SYSDATE, 'MM-DD-YYYY') as now
   FROM DUAL) t
   where t - c.END_DATE <= 30;

假设查询的其余部分是正确的,这将解决日期问题:

select e.STUDENT_ID
  from COURSES c, CLASS_ENROLLMENT e
 where to_date(to_char(sysdate, 'DD-MON-RR')) - c.END_DATE <= 30;
您不需要从dual中选择sysdate,除非您只想出于某种原因显示它,而不需要查询其他内容。您可以将其指定为sysdate,作为任意查询的一部分


在本例中,我将其转换为一个字符,然后转换为一个日期的原因只是为了从sysdate中删除时间,这样,它将从给定的日期算起30天,而与时间无关。如果您不关心时间,可以直接说sysdate-c.end_date,代码取决于使用默认日期格式的客户机。使用truncsysdate-c.END\u DATE会更安全