需求:查询设备未过期的所有设备的信息。涉及到得主要表就是设备表和数据字典表。
      其中设备表am_hardware_info,存有字段start_time(表示设备启动时间);
      数据字典表info_code,存有字段code和code_value,code如果是‘hardware’表示是硬件设备,code_value存的是number类型的数字,表示是设备使用年限
我主要的代码select ah.*,
add_months(ah.startup_time, ic.code_value * 12) - sysdate as overdue from am_hardware_info ah,info_code icwhere ic.code='hardware' and add_months(ah.startup_time, ic.code_value * 12) > sysdate
这个过期处理的不太好,我现在的比较是,把设备启用时间加上数据字典配的(年限*12)个月份,再用这结果和当前日期比较。写得怪怪的。decode这里面也不知道怎么用好,cast函数也用的比较少,大家帮我看看怎么写好,谢谢了!

解决方案 »

  1.   

     startup_time 2005-10-19 15:32:46  (设备启动时间,应该为日期合适点,我的查询语句查出来是时间)code hardware    code_value 5   (数据字典里面表示设备过期年限是5)
    我的查询过程是      (2005-10-19 15:32:46 + 12*5个月)- 当前时间  再去和0比较,我这样处理感觉有问题,起码时间部分没去掉  应该是 (2005-10-19 + 12*5)-当前日期,不过我这种思路我都感觉怪怪的,不知大家怎么处理过期问题。
      

  2.   

    select ah.*,
    add_months(ah.startup_time, ic.code_value * 12) - sysdate as overdue from am_hardware_info ah,info_code icwhere ic.code='hardware' and ah.startup_time <  add_months(sysdate, -ic.code_value * 12)
      

  3.   

    思路应该没有什么改变的了。
    用dateadd应该会快点。http://hi.baidu.com/taojia/blog/item/bda3cefd0cd8c94ed7887d30.html