字典表:
tb2(主键 varchar,维修周期 varchar)
1001   1年
1002   2年主表:
tb1(设备名称 varchar,最近维修时间 DATE,外键 varchar)说明:主表的外键,对应字典表的主键问题: 写一个查询语句,查询出 ((“最近维修时间”+ “维修周期” - 1年) < sysDate)的所有数据

解决方案 »

  1.   

    试试这个:
    SELECT tb1.设备名称
      FROM tb1, tb2
     WHERE tb1.外键 = tb2.主键
       AND add_month(tb1.最近维修时间 + tb2.维修周期, -12) < SYSDATE
      

  2.   

    不对吧,,,,tb2中的维修周期不是DATE类型的,不能直接加,,要用CASE WHEN或IF ELSE判断一下把
      

  3.   

    select m.* , n.* from tb1 m , tb2 n 
    where m.设备名称 = n.主键 and add_months(Add_months(m.最近维修时间 ,12 * to_number(replace(n.维修周期,'年',''))),-12) < sysdate
      

  4.   


    SELECT * 
    FROM tb1,tb2 
    WHERE tb1.外键 = tb2.主键 
      AND add_months(tb1.最近维修时间, to_number(substr(tb2.维修周期,1,length(tb2.维修周期) - 1)) * 12 - 12) < sysdate; 
      

  5.   

    额,维修周期存储为interval或者number,就不用这么费劲了。
      

  6.   


    SELECT * 
    FROM tb1,tb2 
    WHERE tb1.外键 = tb2.主键 
      add_months(tb1.最近维修时间,to_number(translate(tb1.最近维修时间, '\'|| translate(tb1.最近维修时间, '\0123456789', '\'), '\'))* 12 - 12)< sysdate
      

  7.   

    select add_months(add_months(sysdate,to_number('3',0)),-12)-sysdate
                     
    from dual
      

  8.   

    SELECT * from tb1
    left join tb2
    on tb1.外键 = tb2.主键
    where 
    (substr(TO_CHAR(tbl1.zdate, 'YYYY/MM/DD HH:mm:ss'),1,4) 

    replace(tb2.维修周期,'年','') - 1 )|| substr(TO_CHAR(tbl1.zdate, 'YYYY/MM/DD HH:mm:ss'),5) < sysDate
      

  9.   

    SELECT * from tb1
    left join tb2
    on tb1.外键 = tb2.主键
    where  
    (substr(TO_CHAR(tbl1.最近维修时间, 'YYYY/MM/DD HH:mm:ss'),1,4)  
    +  
    replace(tb2.维修周期,'年','') - 1 )|| substr(TO_CHAR(tbl1.最近维修时间, 'YYYY/MM/DD HH:mm:ss'),5) < sysDate
      

  10.   

    上面的sql少个括号
    SELECT * from tb1
    left join tb2
    on tb1.外键 = tb2.主键
    where   
    (substr(TO_CHAR(tbl1.最近维修时间, 'YYYY/MM/DD HH:mm:ss'),1,4)   
    +   
    replace(tb2.维修周期,'年','') - 1 )|| substr(TO_CHAR(tbl1.最近维修时间, 'YYYY/MM/DD HH:mm:ss'),5)) < sysDate
      

  11.   

    SELECT * from tb1
    left join tb2
    on tb1.外键 = tb2.主键
    where   
    (substr(TO_CHAR(tbl1.最近维修时间, 'YYYY/MM/DD HH:mm:ss'),1,4)   
    +   
    replace(tb2.维修周期,'年','') - 1 )|| substr(TO_CHAR(tbl1.最近维修时间, 'YYYY/MM/DD HH:mm:ss'),5) < sysDate