select v.categoryid,
       v.workcategoryid,
       sum(case when to_number(sysdate) > to_number(to_date(v.servicedate,'yyyy-MM-dd')) and to_number(sysdate) < to_number(add_months(to_date(v.servicedate,'yyyy-MM-dd'),v.cycletime/30)) and to_number((add_months(to_date(v.servicedate,'yyyy-MM-dd'),v.cycletime/30) - sysdate)) >to_number(add_months(sysdate,v.warncount/30)) then 1 else 0end) count1, 
       sum(case when to_number(add_months(to_date(v.servicedate,'yyyy-MM-dd'),v.cycletime/30) - sysdate) >= to_number(add_months(sysdate,v.warncount/30)) and to_number(add_months(to_date(v.servicedate,'yyyy-MM-dd'),v.cycletime/30) - sysdate) < to_number(add_months(to_date(v.servicedate,'yyyy-MM-dd'),v.cycletime/30)) then 1 else 0 end) count2,
       sum(case when sysdate > add_months(to_date(v.servicedate,'yyyy-MM-dd'),v.cycletime/30) or to_date(to_date(v.servicedate,'yyyy-MM-dd')) =to_date(null) then 1 else 0 end) count3, count(v.id) allcount
  from (select rownum rownumber,后面的就不写了  主要就是上面的日期大小,怎么写,v.warncount和v.cycletime都是number型  单位天  求大侠帮忙啊  我还没转正!!!!其实就是一个上次维修日期v.servicedate,  预期维修日期(v.servicedate+周期(v.cycletime)),周期:v.cycletime,  提醒日期v.warncount之间的问题,在线等了~!

解决方案 »

  1.   

    日期如果是date 类型可以直接比较,如果都是字符也可以直接比较。
    如果一个是字符型另一个是date型
    则将一个转换成与另一个相同类型的再比较
    select to_date('2012-11-09 09:17:17','yyyy-mm-dd hh24:mi:ss') from dual;
    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
      

  2.   

    SELECT TO_CHAR(SYSDATE,'DD') FROM DUAL