update t set t.b=add_months(t.b,-12) where to_char(t.b,'yyyy')='2015'

解决方案 »

  1.   

    update t set t.b=add_months(t.b,-12) where to_char(t.b,'yyyy')='2015'谢谢版主的回答     还想再请教一下如果把2015-11-8  改为2014-11-7  呢 只改日期 不该时间
      

  2.   


    update t set t.b=add_months(t.b,-12)-1 where to_char(t.b,'yyyy')='2015' 
      

  3.   


    update t set t.b=add_months(t.b,-12)-1 where to_char(t.b,'yyyy')='2015' SQL> update smart_src829_back set SMT_DEALDATETIME=add_months(SMT_DEALDATETIME,-12)-1 where to_char(SMT_DEALDATETIME,'yyyy')='2015'
    ORA-01722: 无效数字
        麻烦看一下那个地方有问题
      

  4.   

    SMT_DEALDATETIME字段是什么类型?难道是char型的?
      

  5.   


    SMT_DEALDATETIME是什么类型?
      

  6.   

    SMT_DEALDATETIME是什么类型?
    看他这意思应该是char型的数据
    还得to_Date、to_char转化了
      

  7.   

    SMT_DEALDATETIME是什么类型?
    看他这意思应该是char型的数据
    还得to_Date、to_char转化了是啊是啊 就是这样  
      

  8.   


    SMT_DEALDATETIME是什么类型?char型 再帮忙看看版主 
      

  9.   


    update smart_src829_back
       set SMT_DEALDATETIME = add_months(TO_DATE(TRIM(SMT_DEALDATETIME),
                                                 'YYYY-MM-DD HH24:MI:SS'),
                                         -12) - 1
     where SUBSTR(TRIM(SMT_DEALDATETIME), 1, 4) = '2015';
      

  10.   


    update smart_src829_back
       set SMT_DEALDATETIME = add_months(TO_DATE(TRIM(SMT_DEALDATETIME),
                                                 'YYYY-MM-DD HH24:MI:SS'),
                                         -12) - 1
     where SUBSTR(TRIM(SMT_DEALDATETIME), 1, 4) = '2015';

    他的是char型,算完日期还得to_char回去
    update smart_src829_back
       set SMT_DEALDATETIME = to_char(add_months(TO_DATE(TRIM(SMT_DEALDATETIME),
                                                 'YYYY-MM-DD HH24:MI:SS'),
                                         -12) - 1,'YYYY-MM-DD HH24:MI:SS')
     where SUBSTR(TRIM(SMT_DEALDATETIME), 1, 4) = '2015';
      

  11.   

    根据SMT_DEALDATETIME是什么类型的,采用TO_CHAR 或者TO_DATE,很好解决的
      

  12.   


    update smart_src829_back
       set SMT_DEALDATETIME = add_months(TO_DATE(TRIM(SMT_DEALDATETIME),
                                                 'YYYY-MM-DD HH24:MI:SS'),
                                         -12) - 1
     where SUBSTR(TRIM(SMT_DEALDATETIME), 1, 4) = '2015';

    他的是char型,算完日期还得to_char回去
    update smart_src829_back
       set SMT_DEALDATETIME = to_char(add_months(TO_DATE(TRIM(SMT_DEALDATETIME),
                                                 'YYYY-MM-DD HH24:MI:SS'),
                                         -12) - 1,'YYYY-MM-DD HH24:MI:SS')
     where SUBSTR(TRIM(SMT_DEALDATETIME), 1, 4) = '2015';
    楼上正解,ADD_MONTHS(TO_DATE(TRIM(SMT_DEALDATETIME),'YYYY-MM-DD HH24:MI:SS'), -12)是减去一年,减一天直接在日期类型变量后-1就行了。