update t set t.b=add_months(t.b,-12) where to_char(t.b,'yyyy')='2015'谢谢版主的回答 还想再请教一下如果把2015-11-8 改为2014-11-7 呢 只改日期 不该时间
update t set t.b=add_months(t.b,-12)-1 where to_char(t.b,'yyyy')='2015'
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: 无效数字 麻烦看一下那个地方有问题
update t set t.b=add_months(t.b,-12)-1 where to_char(t.b,'yyyy')='2015'
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: 无效数字 麻烦看一下那个地方有问题
SMT_DEALDATETIME是什么类型?
看他这意思应该是char型的数据
还得to_Date、to_char转化了
看他这意思应该是char型的数据
还得to_Date、to_char转化了是啊是啊 就是这样
SMT_DEALDATETIME是什么类型?char型 再帮忙看看版主
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';
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';
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就行了。